获取setOnItemClickListener中listview中的所有视图

时间:2014-07-14 20:46:31

标签: android listview android-listview android-view

我使用下面的代码来设置列表视图中所选项目的颜色。规则只有一个应该是彩色的。但如果我选择2个视图,则使用以下代码都会变色。你能帮我看看列表视图中的所有其他视图,这样当我点击某个视图时我设置为不同颜色的所有其他视图和所选视图我设置了不同的颜色(在这种情况下为绿色)。 如果有其他解决方案,请告诉我?

enter image description here

lv = (ListView) view.findViewById(R.id.listf);
    lv.setAdapter(text![enter image description here][1]Adapter);
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            TextView v = (TextView) view.findViewById(R.id.template_text);
            view.setBackgroundColor(Color.GREEN);
        }
    });

2 个答案:

答案 0 :(得分:1)

我使用以下方法解决了问题: 我设置了一个循环,其中只有选定的列表项设置为RED,而其他所有列表项都设置为绿色,这样只有一个列表项将被选中。

lv = (ListView) view.findViewById(R.id.listf);
lv.setAdapter(Adapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    for (int i = 0; i < 3; i++) 
    {
       if (position == i) 
       {
           parent.getChildAt(i).setBackgroundColor(Color.RED);
       } 
       else 
       {
          parent.getChildAt(i).setBackgroundColor(getResources().getColor(R.color.Dark_Green);
       }
    }
    TextView v = (TextView) view.findViewById(R.id.template_text);
    view.setBackgroundColor(Color.GREEN);
  }
});

答案 1 :(得分:0)

正如您所说,无法更改适配器代码,您可以更喜欢解决方案2。

解决方案1:在适配器类中创建一个变量int selectedPosition和方法setSelected

int selectedPosition = -1;
public void setSelected(int position)
{
     selectedPosition = position;
     notifyDatasetChanged();
}

编辑适配器类的getView()并包含以下代码

if(selectedPosition==position)
{
     templateTextView.setBackgroundColor(Color.GREEN);
}
else templateTextView.setBackgroundColor(Color.BLUE);//  default textView color

解决方案2:同时保留以前所选textView的引用,每次将当前所选textview的颜色更改为绿色,将前一个文本视图的颜色更改为蓝色

TextView previousSelected = null;
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        if(previousSelected!=null)
             previousSelected.setBackgroundColor(Color.BLUE);
        TextView v = (TextView) view.findViewById(R.id.template_text);
        view.setBackgroundColor(Color.GREEN);
        previousSelected = v;
    }
});