我正在努力更新自定义列表视图中的一行按钮的图像。我为listview创建了一个自定义适配器类。单击列表视图中的一行内的按钮,我打开了一个自定义对话框。现在点击对话框的确定按钮,我想要更改列表视图中按钮的图像。
目前我刚刚在listview中创建了静态按钮,并将该按钮的对象传递给自定义对话框方法。我使用简单的listview而不是片段。
@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 是我传递给自定义对话框方法的那个按钮的对象。这样,图像在任何行的列表视图上随机更新。
请建议我做一些更好的主意。
答案 0 :(得分:1)
简要说明:
Adapter
充当您的数据模型的控制器,在您的情况下为List<itemsInfo>
,并在getView()方法中相应地更新其指定的ListView
。
您的目标是在执行特定操作时单击ListView
的视觉状态。这可以通过在执行操作时更改Adapter
ListView
后面的数据模型来完成,并让ListView
在Adapter
的帮助下重绘自己。
在代码中:
在包含特定状态的itemsInfo中添加一个字段。这可以是任何格式或形式,但是现在,让我们使用一个名为isPressed的布尔值。
在你的getView()中,你的View
将根据此按下的状态进行初始化。
viewHolder.itemSelection.whatevermethodyouwant(itemsInfo.get(position).isPressed)
如果要更改行的状态,只需更改给定位置的数据模型,然后再次更新ListView
。
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
}
});
这只是解释事件流的伪代码。希望它能帮助您改进实施。