Pojawiająca się pozycja -1 na

0

Witam,
teraz pracuję nad funkcjonalnością zmiany nazwy karty. Problem jest taki ze klikam na opcję zmień nazwę karty klikam zapisz . Wyświetla mi się numer pozycji -1. Jeżeli mam więcej kart w liście za każdym razem pojawia nam się to samo. Mógłby mi ktoś wytłumaczyć dlaczego tak się dzieje ?

public class CardAdapter extends RecyclerView.Adapter<CardAdapter.CardViewHolder> {
    boolean isError = false;
    private Card card;
    private Context mContext;
    private ArrayList<Card> cardslist = new ArrayList<Card>();
    private MySharedPreference mySharedPreference;

    public CardAdapter(Context mContext, ArrayList<Card> cardslist) {

        this.mContext = mContext;
        this.cardslist = cardslist;
        notifyDataSetChanged();

    }


    @Override
    public CardViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_cardview, parent, false);
        return new CardViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final CardViewHolder holder, final int position) {
        card = cardslist.get(position);

        holder.nameCard.setText(card.getNameCard());
        holder.setDate.setText(card.getCreateDate());
        holder.expirationDate.setText(card.getExpirationDate());
        holder.menu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                final PopupMenu popupMenu = new PopupMenu(mContext, holder.menu);
                popupMenu.inflate(R.menu.cardmenu);
                popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {

                        Typeface custom_fonts = Typeface.createFromAsset(mContext.getAssets(), "fonts/OpenSans-Regular.ttf");

                        Typeface custom_fonts_Bold = Typeface.createFromAsset(mContext.getAssets(), "fonts/OpenSans-Bold.ttf");

                        switch (item.getItemId()) {
                            case R.id.editCard:

                                // dialog który powoduje edycje karty
                                final AlertDialog.Builder alert = new AlertDialog.Builder(mContext);

                                final LayoutInflater inflater = LayoutInflater.from(mContext);
                                final View alterView = inflater.inflate(R.layout.editcarddialog, null);
                                alert.setView(alterView);

                                TextView editTextView = (TextView) alterView.findViewById(R.id.editCardText);
                                editTextView.setTypeface(custom_fonts);


                                final EditText nameCardEditText = (EditText) alterView.findViewById(R.id.nameCardEditText);
                                nameCardEditText.setTypeface(custom_fonts);
                                nameCardEditText.setText(card.getNameCard());


                                alert.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {
                                        dialog.dismiss();
                                    }
                                });

                                alert.setPositiveButton(R.string.save, new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {


                                        String oldNameCardString = card.getNameCard();

                                        final String newNameCardString = nameCardEditText.getText().toString();
                                        int indexOf = cardslist.indexOf(oldNameCardString);

                                        Toast.makeText(mContext, "Numer Poazycji " + indexOf, Toast.LENGTH_SHORT).show();

                                        TextView indexOfTextView  = (TextView) alterView.findViewById(R.id.indexOf);
                                        indexOfTextView.setText("Pozycja na karcie "+indexOf);


                                    }
                                });

                                alert.create();
                                alert.show();
                                break;
0

Gdy wywołujesz metodę indexOf() klasy ArrayList Java w swoich bebechach wywołuje metodę equals() klasy obiektu który trzymasz w ArrayList, a Ty używasz tego jakbyś miała na tej liście stringi i dlatego nie działa, a właściwie działa, ale inaczej niż sobie wyobrażasz.

0

Poprawione i jest w porządku

 alert.setPositiveButton(R.string.save, new DialogInterface.OnClickListener() {
                                    @Override
                                    public void onClick(DialogInterface dialog, int which) {

                                        final String newNameCardString = nameCardEditText.getText().toString();
                                        int indexOf = cardslist.get(position).setNameCard(newNameCardString);
                                        cardslist.set(indexOf, card);
                                        notifyItemChanged(indexOf);
                                        
                                    }
                                });
0
magdalena123 napisał(a):

Poprawione i jest w porządku

>  alert.setPositiveButton(R.string.save, new DialogInterface.OnClickListener() {
>                                     @Override
>                                     public void onClick(DialogInterface dialog, int which) {
> 
>                                         final String newNameCardString = nameCardEditText.getText().toString();
>                                         int indexOf = cardslist.get(position).setNameCard(newNameCardString);
>                                         cardslist.set(indexOf, card);
>                                         notifyItemChanged(indexOf);
>                                         
>                                     }
>                                 });
0

Ja myślałem raczej o tym, żeby nadpisać metodę equals() klasy Card, ale jak widać dróg do rozwiązania jest zawsze kilka.

1 użytkowników online, w tym zalogowanych: 0, gości: 1