-1

I have a ListView and i set an alert dialog to change text when button clicked by setText to a new Edittext and then setView on alertdialog for this edittext

when i click button alertdialog show and i can change text in list

alert dialog

my text

but when I scroll page , changed text back to text that I set in on MainActivity

My Adapter code

public class AdapterItem extends BaseAdapter {

private Context mContext;
private ArrayList<ItemModel> mItemModels;



public AdapterItem(Context context, ArrayList<ItemModel> list) {

    this.mContext = context;
    this.mItemModels = list;
}

@Override
public int getCount() {

    return mItemModels.size();
}

@Override
public Object getItem(int position) {

    return mItemModels.get(position);
}

@Override
public long getItemId(int position) {

    return 0;
}

@Override
public View getView(int position, View view, ViewGroup viewGroup) {

    if (view == null) {
        view = LayoutInflater.from(mContext).inflate(R.layout.item_simple_listview, viewGroup, false);

    }

    ItemModel item = (ItemModel) getItem(position);

    ImageButton imageButton = view.findViewById(R.id.imageButton);
    TextView text1 = view.findViewById(R.id.textViewONe);
    ImageView image = view.findViewById(R.id.imageViewItem);

    text1.setText(item.getTextOne());
    image.setImageResource(item.getImageView());

    final View finalView = view;

    imageButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            final EditText userinput = new EditText(mContext);

            new AlertDialog.Builder(mContext).setTitle("Change Text")
                .setMessage("Input Your Own Text").setPositiveButton("OK", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {

                    TextView text1 = finalView.findViewById(R.id.textViewONe);
                    text1.setText(userinput.getText());

                }
            })
                .setCancelable(true).setView(userinput).create().show();

        }
    });

    return view;
}}
Ali Khaki
  • 1,184
  • 1
  • 13
  • 24

1 Answers1

1

Change the content of modelItem and call notiDataSetChanged() on your adapter. Well you could do

 imageButton.setTag(position); // set tag the position
        imageButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                final int post = (int) v.getTag(); // get position
                final EditText userinput = new EditText(mContext);

                new AlertDialog.Builder(mContext).setTitle("Change Text")
                        .setMessage("Input Your Own Text").setPositiveButton("OK", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                        ItemModel itemModel = mItemModels.get(post);

                        itemModel.setTextOne(userinput.getText().toString()); // change the data set at the position
                        notifyDataSetChanged(); // refresh adapter

                    }
                })
                        .setCancelable(true).setView(userinput).create().show();

            }
        });

Few suggestions : Switch to recyclerview or atleast implement viewholder pattern for listview.

Raghunandan
  • 132,755
  • 26
  • 225
  • 256
  • Thanks.that work.what is benefit of viewholder if i use?? – Ali Khaki Jul 22 '18 at 08:14
  • https://stackoverflow.com/questions/21501316/what-is-the-benefit-of-viewholder the answer by atalum is good check it out. and read https://developer.android.com/training/improving-layouts/smooth-scrolling. – Raghunandan Jul 22 '18 at 08:17