java - 单击后如何禁用 ListView 项目?

标签 java android listview android-listview android-arrayadapter

我有一个简单的 Strings 数组,我使用 ArrayAdapter 在水平 ListView 中显示它。 我想要做的是:当用户从 ListView 中选择一个项目时,使该项目不可点击并更改该项目的背景颜色。也许就像一个“变灰”的样子。我正在研究创建自定义 Adapter 并覆盖 isEnabled(int position) 方法,但我不知道我将如何去做。非常感谢任何意见、建议或帮助!

最佳答案

I was looking into creating a custom Adapter and overriding the isEnabled(int position) method but I don't know how I would go about this.

这很容易做到。我建议使用 SparseBooleanArray 来跟踪启用的项目以提高效率:

public class MyAdapter extends ArrayAdapter<String> {
    private SparseBooleanArray enabledItems = new SparseBooleanArray(); 

    public MyAdapter(Context context, int textViewResourceId, List<String> objects) {
        super(context, textViewResourceId, objects);
    }

    @Override
    public boolean areAllItemsEnabled() {
        return false;
    }

    @Override
    public boolean isEnabled(int position) {
        return enabledItems.get(position, true);
    }

    public void toggleItem(int position) {
        boolean state = enabledItems.get(position, true);
        enabledItems.put(position, !state);
    }
}

Eclipse 的自动完成功能完成了必须的工作,但这里有一些快速说明:

  • 您必须覆盖 areAllItemsEnabled() 以及 isEnabled()
  • 我设计了 toggle()onItemClickListener() 使用,您只需调用 adapter.toggle(position)<
  • 如果您想更改行的外观(比默认情况下启用和禁用所做的更多)只需重写 getView()。不要忘记涵盖这两种情况:

    public View getView(int position, View convertView, ViewGroup parent) {
        convertView = super.getView(position, convertView, parent);
    
        if(!isEnabled(position)) { 
            /* change to disabled appearance */ 
        } 
        else { 
            /* restore default appearance */ 
        }
        return convertView;
    }
    

    希望对您有所帮助!

关于java - 单击后如何禁用 ListView 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15885928/

相关文章:

java - 什么是NullPointerException,我该如何解决?

java - 调用方法、参数和参数

Android - ExpandableListView 更改子项的背景

c# - ListView中的自定义ListViewItem

Android Fedor 的延迟加载将图像传递给其他 Activity

java - 动态创建子项目,可以根据不同用户通过子域访问

java - 在 JVM 中并行加载同一库的不同版本

java - 如何迭代嵌套类?

java - Android 服务不断被杀死?

listview - 使用显示对话框和文本字段更新 Flutter 中的单个 ListView 项