设置ListView行中图像的可见性

时间:2016-12-01 04:34:45

标签: android listview

概述

我有一个带有自定义适配器/布局的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;
}

谢谢

3 个答案:

答案 0 :(得分:1)

这是你的priceList绑定适配器? 首先,我会设置一个断点,看看你是否在updateView方法中获得了正确的视图。

答案 1 :(得分:0)

尝试这种方式;

  • 使用imageview创建一个Pojo类,它的状态(Visibility)最初将all设置为不可见
  • 将您的项目添加到Pojo类型的ArrayList中。
  • 当用户根据您的需求设置可见性状态为true或false(可见或不可见)输入新行并向适配器调用notifyDataSetChanged()时。
  • 通过这种方式,您可以轻松跟踪项目。

答案 2 :(得分:0)

我得到了它的工作:)。

问题是adapter.notifyDataSetChanged();是异步的,所以当它这样做时,updateView(findMinIndex(priceList));运行,但没有找到应该的新行。因此,我将一个runnable添加到ListView对象中:

adapter.notifyDataSetChanged();
listView.post( new Runnable() {
    @Override
    public void run() {
        updateView(findMinIdx(priceList));
    }
});

现在它完美无缺!