Java 无法将名片更新为回收视图

Java 无法将名片更新为回收视图,java,android,android-recyclerview,Java,Android,Android Recyclerview,我无法保存名片。当在弹出菜单中单击并选择“将名称更改为卡”选项时。显示更改对话框,编辑名片时显示此对话框名称,然后单击“保存到名片”。应用程序停止工作 我的错误日志 java.lang.ArrayIndexOutOfBoundsException: length=12; index=-1 at java.util.ArrayList.set(ArrayList.java:483) at com.xxxxx.smrtkarta.adapter.CardAdapter$1$1$2.

我无法保存名片。当在弹出菜单中单击并选择“将名称更改为卡”选项时。显示更改对话框,编辑名片时显示此对话框名称,然后单击“保存到名片”。应用程序停止工作

我的错误日志

 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)
我的班级卡适配器

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;
我只是更正我的数据

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

                                }
                            });
它可以工作:

您正在ArrayList中搜索字符串。要确定索引,您必须在列表中循环并检查每个卡的card.getNameCard,查看它是否等于nameCardString。