Java Viewholder如何正确更新视图
我正在尝试使用对话框更新listview。但当我在对话框中输入数量时,它将显示在listview中,但当我滚动listview时,其他行也将更新。我只想更新我单击的行 下面是我的适配器代码。 有人请帮帮我。非常感谢Java Viewholder如何正确更新视图,java,android,android-adapter,Java,Android,Android Adapter,我正在尝试使用对话框更新listview。但当我在对话框中输入数量时,它将显示在listview中,但当我滚动listview时,其他行也将更新。我只想更新我单击的行 下面是我的适配器代码。 有人请帮帮我。非常感谢 public class MyAppAdapter extends BaseAdapter { public class ViewHolder { TextView productid, productname, pcs, cs; Imag
public class MyAppAdapter extends BaseAdapter {
public class ViewHolder {
TextView productid, productname, pcs, cs;
ImageView dist;
}
public List<Product_List> parkingList;
public Context context;
ArrayList<Product_List> arrayList;
private MyAppAdapter(List<Product_List> apps, Context context) {
this.parkingList = apps;
this.context = context;
arrayList = new ArrayList<Product_List>();
arrayList.addAll(parkingList);
}
@Override
public int getCount() {
return parkingList.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View rowView = convertView;
final MyAppAdapter.ViewHolder viewHolder;
if (rowView == null) {
LayoutInflater inflater = getLayoutInflater();
rowView = inflater.inflate(R.layout.productlist, parent, false);
viewHolder = new MyAppAdapter.ViewHolder();
viewHolder.productid = (TextView) rowView.findViewById(R.id.productid);
viewHolder.productname = (TextView) rowView.findViewById(R.id.productname);
viewHolder.pcs = (TextView) rowView.findViewById(R.id.pcs);
viewHolder.cs = (TextView) rowView.findViewById(R.id.cs);
viewHolder.dist = (ImageView) rowView.findViewById(R.id.dist);
rowView.setTag(viewHolder);
} else {
viewHolder = (MyAppAdapter.ViewHolder) convertView.getTag();
}
viewHolder.productid.setText(parkingList.get(position).getInvtID() + "");
viewHolder.productname.setText(parkingList.get(position).getDescr() + "");
final String a = viewHolder.productid.getText().toString();
final String b = viewHolder.productname.getText().toString();
if ( position % 2 == 0) {
rowView.setBackgroundColor(Color.parseColor("#FFFFFF"));
} else {
rowView.setBackgroundColor(Color.parseColor("#ECEAEA"));
}
rowView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
final Dialog dialog = new Dialog(InventoryChecking1.this);
dialog.setTitle("Inventory Checking");
dialog.setContentView(R.layout.inventory);
final TextView productids = (TextView) dialog.findViewById(R.id.productids);
productids.setText(a);
final TextView productdesc = (TextView) dialog.findViewById(R.id.productdesc);
productdesc.setText(b);
final EditText pcss = (EditText) dialog.findViewById(R.id.pcss);
final EditText css = (EditText) dialog.findViewById(R.id.css);
final RadioButton btnyes = (RadioButton) dialog.findViewById(R.id.btnyes);
final RadioButton btnno = (RadioButton) dialog.findViewById(R.id.btnno);
btnno.setChecked(true);
Button btnsave = (Button) dialog.findViewById(R.id.btnsave);
btnsave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewHolder.pcs.setText(pcss.getText().toString());
viewHolder.cs.setText(css.getText().toString());
if (btnyes.isChecked()) {
viewHolder.dist.setImageResource(R.drawable.done);
} else {
viewHolder.dist.setImageResource(R.drawable.no);
}
dialog.dismiss();
}
});
dialog.show();
}
});
return rowView;
}
}
你应该打电话
通知附加的观察者基础数据已被删除
已更改,任何反映数据集的视图都应刷新自身
演示
供参考
如果您在调用适配器的类中使用RecyclerView,这将是一个很好的方法, 设置如下
myAppAdapter = new MyAppAdapter();
imagegrid.setAdapter(myAppAdapter);
//imagegrid is a gridview where i need to set the adapter
希望能有所帮助。我尝试过,但在滚动列表视图时仍然一样,其他行也会更新,但我只想更新我单击的行。不管怎样,谢谢你help@KaiJie您应该添加setOnClickListener sectionadded仍然相同:@IntelliJAmiya问题是只更新他在listview中单击的行。但listview不提供只更新项目的方法。@KaiJie使用RecycleView我们正处于RecycleView时代。。所以用它来代替listview。@dhams同意。使用RecycleView是最好的方法如果使用RecycleView,则可以使用其适配器的notifyItemChanged。切勿使用ListView中的视图存储值/字符串,因为它们在滚动时丢失/回收。你应该自己存储这些值。尝试初始化数组以存储csint、pcsint和distboolean。然后在getView中,使用if-else将text/setImageResource设置为这些视图。在OnClick内部,您只需将这些值设置为数组中相应的位置,然后调用notifyDataSetChanged。我在这里的回答可能会有所帮助:myAppAdapter=新MyAppAdapterItemsArray列表,清单检查1.this;listView.SetChoiceModelListView.CHOICE\u MODE\u MULTIPLE;listView.setAdaptermyAppAdapter;这是我的适配器我不能添加imagegrid我的意思是你必须用列表视图对象替换imagegrid如果你添加一些图像或进一步澄清会更好,这样会鼓励别人准确回答
myAppAdapter = new MyAppAdapter();
imagegrid.setAdapter(myAppAdapter);
//imagegrid is a gridview where i need to set the adapter