简体   繁体   中英

Can 't update name Card to Recycle View

I have problem to save name Card. When click in PopupMenu and select to option Change name to card. Show alter dialog, this dialog name when edit name Card and click save to card. The application stops working.

My error log

 java.lang.ArrayIndexOutOfBoundsException: length=12; index=-1
    at java.util.ArrayList.set(ArrayList.java:483)
    at com.xxxxx.smrtkarta.adapter.CardAdapter$1$1$2.onClick(CardAdapter.java:112)
  at android.support.v7.app.AlertController$ButtonHandler.handleMessage(AlertController.java:157)
  at android.os.Handler.dispatchMessage(Handler.java:102)
  at android.os.Looper.loop(Looper.java:148)
  at android.app.ActivityThread.main(ActivityThread.java:5417)
  at java.lang.reflect.Method.invoke(Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

My class CardAdapter

public class CardAdapter extends RecyclerView.Adapter<CardAdapter.CardViewHolder> {

    private Card card;
    private Context mContext;
    private ArrayList<Card> cardslist = new ArrayList<Card>();
    private SharedPreferences sharedPreferences;

    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);
                                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) {

                                        final String nameCardString = nameCardEditText.getText().toString();


                                        int indexOf = cardslist.indexOf(nameCardString);
                                        cardslist.set(indexOf, card);
                                        notifyItemChanged(indexOf);


                                        Toast toast = Toast.makeText(mContext, "Karta została zapisana ", Toast.LENGTH_LONG);
                                        LinearLayout layout = (LinearLayout) toast.getView();
                                        if (layout.getChildCount() > 0) {
                                            TextView tv = (TextView) layout.getChildAt(0);
                                            tv.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
                                        }
                                        toast.show();
                                    }
                                });

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

I just correct my data

 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);

                                }
                            });

It works :)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM