我有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中的下一个项目时,上一个项目中的按钮将变为不可见,因为当前项目的按钮变为可见。那么如何更新上一项的视图呢?
答案 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()方法中做到这一点。