0

我有 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 中的下一个项目时,上一个项目的 Button 应该变得不可见,因为当前项目的 Button 变得可见。那么如何更新前一项的视图呢?

4

2 回答 2

4

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

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;
于 2012-08-28T04:52:54.917 回答
0

在按钮而不是列表视图本身上附加一个侦听器。您可以在 getview() 方法中执行此操作。

于 2012-08-28T04:52:10.637 回答