更新ListView以前单击的项目

时间:2012-08-28 04:44:42

标签: android android-listview

我有ListView,它被自定义为包含EditText框和一个Button。 ListView将文本框显示为visible,但按钮显示为invisible。当用户单击ListView中的项目时,Button可见。我为ListView编写了以下代码:

public void onItemClick(AdapterView<?> list, View view, int position, long id) {    
    view.findViewById(R.id.button).setVisibility(View.VISIBLE);
}

上面的代码在第一个项目的Button和第二个项目的Button可见的情况下起作用。

我的问题:
单击ListView中的下一个项目时,上一个项目中的按钮将变为不可见,因为当前项目的按钮变为可见。那么如何更新上一项的视图呢?

2 个答案:

答案 0 :(得分:3)

将上一行存储在类变量中:

View previous;
...

public void onItemClick(AdapterView<?> list, View view, int position, long id) {    
    if(previous != null)
        previous.setVisibility(View.INVISIBLE);

    // Set the current button to visible while saving it for the next click 
    previous = view.findViewById(R.id.button);
    previous.setVisibility(View.VISIBLE);
}

添加评论

你是对的。适配器的视图回收正在影响其他行,所以让我们扩展您正在使用的任何适配器并覆盖其getView()方法:

public int selectedRow = -1;
...

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = super.getView(position, convertView, parent);

    // Here, either use findViewById() (slower) or the ViewHolder method (faster) to load the button:
    // Button button = ...

    if(position == selectedRow) 
        button.setVisibility(View.VISIBLE);
    else
        button.setVisibility(View.GONE);

    return view;
}

在您的onItemClick()方法中添加如下所示的行:

adapter.selectedRow = position;

答案 1 :(得分:0)

在按钮上附加一个监听器而不是listview本身。你可以在getview()方法中做到这一点。