android - 滚动时 listView 中的 Textview 变回
问题描述
我有一个 ListView,我设置了一个警报对话框以在 setText 单击按钮时将文本更改为新的 Edittext,然后在 alertdialog 上为该 edittext 设置视图
当我单击按钮 alertdialog show 时,我可以更改列表中的文本
但是当我滚动页面时,将文本更改回我在 MainActivity 上设置的文本
我的适配器代码
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;
}}
解决方案
更改内容modelItem
并调用notiDataSetChanged()
您的适配器。那么你可以做
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();
}
});
一些建议:切换到 recyclerview 或至少为 listview 实现 viewholder 模式。
推荐阅读
- java - 为什么检测 Spring REST Controller 线程等待锁定?
- r - 使用准引号命名新列时可以使用函数吗?
- asp.net-mvc - 具有分组功能的 Kendo Grid 自动跳转到第一个匹配元素
- sql - 如何在 Oracle 中识别工作日?
- javascript - 在同一键上的多个属性上过滤数组
- testing - 如何在 Flutter 小部件测试中停用或忽略布局溢出消息?
- javascript - 在网页抓取期间使用 HTMLSession.render() 时如何“强制”渲染 javascript?
- python - 气流 sqlite3.operationalerror 数据库被锁定然后调度程序崩溃
- c# - 从字符串动态构建 LINQ 查询
- sql - 将日期范围分组为 15 天的滚动组