在Android中更改Listview所选项目的文本颜色

时间:2013-07-29 10:01:37

标签: android android-listview textcolor

我正在创建一个应用程序,其中有一个Listview。当我选择此Listview项时,会出现一个Alert dialog
在此“警报”对话框中,还有一个Listview。此列表视图中的项目取决于用户输入。
现在,当我在此列表视图中选择项目时,必须更改文本颜色,当我再次选择此项目时,文本颜色必须更改为其原始颜色。
应该做什么?

1 个答案:

答案 0 :(得分:0)

向您的班级添加一个跟踪所选项目的地图:

HashMap <Integer, Boolean> selectionStates = new HashMap <String, Boolean>();

为ListView使用自定义适配器。在getView中,根据地图中的值设置颜色:

if (selectionStates.contains(position) && selectionStates.get(position){
  yourTextView.setTextColor(selectedColor);
}
else {
  yourTextView.setTextColor(normalColor);
}

将onItemClickListener添加到ListView,例如in onCreate:

yourListView.setOnItemClickListener(){
  public void onItemClick (AdapterView<?> parent, View view, int position, long id){
    boolean alreadySelected = false;
    if (selectionStates.contains(position) && selectionStates.get(position) alreadySelected = true;
    selectionStates.put(position, !alreadySelected);

    TextView yourTextView = (TextView) view.findViewById(R.id.yourItemTextView);

    if (selectionStates.contains(position) && selectionStates.get(position){
      yourTextView.setTextColor(selectedColor);
    }
    else {
      yourTextView.setTextColor(normalColor);
    }
  }
};

这不仅会在选择项目后立即更改项目的颜色,还会在滚动后保留颜色。

作为适配器,您可以扩展ArrayAdapter:

yourListView.setAdapter(new ArrayAdapter<WhatEverClass>(ArgumentsHere){
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
      View view = super.getView(position, convertView, parent);
      TextView yourTextView = (TextView) view.findViewById(R.id.yourItemTextView);

      if (selectionStates.contains(position) && selectionStates.get(position){
         yourTextView.setTextColor(selectedColor);
      }
      else {
         yourTextView.setTextColor(normalColor);
      }
  }
});

请注意,我没有测试此代码,但它至少应该让您了解代码应该是什么样的。