Android 从自定义对话框更新Listview行UI
我正在努力更新自定义listview中一行中一个按钮的图像。我已经为listview创建了一个自定义适配器类。单击listview一行中的按钮,我打开了一个自定义对话框。单击对话框的确定按钮,现在我不想更改该列表视图中按钮的图像 目前,我刚刚在listview中创建了静态按钮,并将该按钮的对象传递给自定义对话框方法。我使用的是简单的listview,而不是片段Android 从自定义对话框更新Listview行UI,android,android-listview,android-dialog,Android,Android Listview,Android Dialog,我正在努力更新自定义listview中一行中一个按钮的图像。我已经为listview创建了一个自定义适配器类。单击listview一行中的按钮,我打开了一个自定义对话框。单击对话框的确定按钮,现在我不想更改该列表视图中按钮的图像 目前,我刚刚在listview中创建了静态按钮,并将该按钮的对象传递给自定义对话框方法。我使用的是简单的listview,而不是片段 @Override public View getView(int position, View convertView, Vi
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ItemInfoViewHolder viewHolder;
Log.d("Inside Get View", ""+position);
if (convertView == null) {
convertView = listInflater.inflate(R.layout.iteminfo_view_row, null);
viewHolder = new ItemInfoViewHolder();
viewHolder.itemSelection = (Button)convertView.findViewById(R.id.itemselectionTextview);
convertView.setTag(viewHolder);
}else{
viewHolder = (ItemInfoViewHolder)convertView.getTag();
}
try{
viewHolder.itemSelection.setId(itemsInfo.get(position).getId());
);
viewHolder.itemSelection.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("Item Id"+v.getId());
Toast.makeText(mContext, "Item Button Clicked", Toast.LENGTH_SHORT).show();
int itemId = v.getId();
SelectPopup selectPopup = new SelectPopup(mContext, R.style.myCoolDialog);
selectPopup.selectQuantity(itemsInfo,itemId,viewHolder.itemSelection);
}
});
}catch(Exception e){
e.printStackTrace();
}
return convertView;
}
这里viewHolder.itemSelection是我传递给自定义对话框方法的按钮的对象。通过此操作,可以在任何行的listview上随机更新图像
请给我一些更好的建议 简要说明:
适配器
充当数据模型的控制器,在您的示例中是一个列表
,并在getView()方法中相应地更新其分配的列表视图
您的目标是,每当您执行某个操作时,单击鼠标,即可更改列表视图的可视状态。只要在执行操作时更改列表视图的适配器
后面的数据模型,并要求列表视图
在适配器
的帮助下重新绘制自己,就可以实现这一点
代码:
在itemsInfo中添加一个字段,该字段将保存特定状态。这可以是任何格式或形式,但现在,让我们使用一个名为isPressed的布尔值
在getView()中,您的视图将根据此按下的状态自动初始化
viewHolder.itemSelection.whatevermethodyouwant(itemsInfo.get(position).isPressed)
当您想要更改行的状态时,只需在给定位置更改数据模型,然后再次更新列表视图
viewHolder.itemSelection.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
itemsInfo.get(position).setPressed(whatever);
notifyDataSetChanged(); // This is a call for your Adapter and will refill the ListView
}
});
这只是解释事件流的伪代码。希望它能帮助您改进实现。您能发布完整的getView方法吗?问题是,您应该在适配器后面更改数据模型,并让ListView基于此更新自身,而不是自己直接更改视图。@DroidBender我已经粘贴了整个getview代码。另外,我在其他类中创建了cutom对话框SelectPopup并调用了该类的方法。谢谢您的回复。但是我必须先打开一个自定义对话框,单击ListItem,然后更改我在其他类中创建的对话框的OK行的状态。然后,您可以简单地创建一个回调,当您按下OK时返回到适配器,并相应地编辑/更新您的itemsInfo模型。要创建接口或回调,您可以在此处看到一个示例: