【问题标题】:Update ListView previous clicked item更新 ListView 上一个单击的项目
【发布时间】:2012-08-22 14:03:13
【问题描述】:

我有 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 变得可见。那么如何更新前一项的视图呢?

【问题讨论】:

    标签: android android-listview


    【解决方案1】:

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

    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);
    }
    

    来自 cmets 的添加

    你是对的。适配器的视图回收正在影响其他行,所以让我们扩展您正在使用的任何适配器并覆盖其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;
    

    【讨论】:

    • 上面的代码正在运行。谢谢。但是布局的大小会增加。如何将其恢复到原始大小?
    • 完成!我已经转换为 View.GONE,而不是 View.INVISIBLE。
    • 有问题。当我向下滚动时,该按钮在倒数第二个下面的项目中可见。我认为这种观点正在被回收。有什么建议吗?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多