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.