概述:
我有一个带有自定义适配器/布局的ListView,每次用户添加一个新行(包含一个数字)时,我会检查该数字是否在列表中最小。如果是这样,则必须将该行中的图像设置为可见,同时将所有其他行的图像设置为不可见。
问题:
我的ListView没有将任何行的图像设置为可见,即使我有最小元素的索引。
我是怎么做的:
//In MainActivity
private void addProduct(float price) { //User adds product
priceList.add(price); //Add to Float list
adapter.notifyDataSetChanged();
updateView(findMinIndex(priceList)); //Find smallest val indx
}
private void updateView(int index){
View v = listView.getChildAt(index -
listView.getFirstVisiblePosition());
if(v == null)
return;
ImageView checkMark = (ImageView) v.findViewById(R.id.check_mark);
checkMark.setVisibility(View.VISIBLE); //Initially set Invisible
}
编辑,CustomAdapter:
public CustomList(Activity context,
ArrayList<Float> priceList) {
super(context, R.layout.list_single, priceList);
this.context = context;
priceList = priceList;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
LayoutInflater inflater = context.getLayoutInflater();
View rowView = inflater.inflate(R.layout.list_single, null, true);
TextView price = (TextView) rowView.findViewById(R.id.new_price);
ImageView cheapest = (ImageView) rowView.findViewById(R.id.check_mark);
price.setText(priceList.get(position) + "");
return rowView;
}
谢谢
答案 0 :(得分:1)
这是你的priceList绑定适配器? 首先,我会设置一个断点,看看你是否在updateView方法中获得了正确的视图。
答案 1 :(得分:0)
尝试这种方式;
答案 2 :(得分:0)
我得到了它的工作:)。
问题是adapter.notifyDataSetChanged();是异步的,所以当它这样做时,updateView(findMinIndex(priceList));运行,但没有找到应该的新行。因此,我将一个runnable添加到ListView对象中:
adapter.notifyDataSetChanged();
listView.post( new Runnable() {
@Override
public void run() {
updateView(findMinIdx(priceList));
}
});
现在它完美无缺!