ListView选择问题...使用onItemClick(AdapterView <! - ? - > parent,View view,...)

时间:2010-04-01 04:00:05

标签: android listview background textview android-arrayadapter

我希望在这里解决的问题是,当我点击ListView中的一个项目时,该项目的背景变为浅灰色,但是当我继续滚动列表时,每个第四个项目的背景都变为浅灰色,即使其他项目没有被点击。如何仅通过点击使我点击的项目生效?

    ListView lv = (ListView) findViewById(R.id.resultsList);
    lv.setAdapter(new ArrayAdapter<String>(this, R.layout.resultitem, (String[])labelList.toArray(new String[labelList.size()])));

    lv.setOnItemClickListener(new OnItemClickListener() {    

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {      
            TextView tv = (TextView)view.findViewById(R.id.result);
            tv.setBackgroundColor(Color.LTGRAY);
            tv.setTextColor(Color.BLACK);
        }
     }

2 个答案:

答案 0 :(得分:1)

您必须在ListAdapter的子类中重写getView(),在本例中为ArrayAdapter。

这是因为Android实际上重用了行来节省资源和CPU(当一行从屏幕上滚动时,它会被重新用于进入视图的新行)。因此,如果您将背景设置为灰色,则可能最终会再次使用,背景仍为灰色。

如果你是ArrayAdapter的子类,你可以让你的onItemClickListener设置某种标志,然后你的ArrayAdapter的getView(),你可以根据标志设置适当的背景颜色。

This link有一个子类化ArrayAdapter

的例子

答案 1 :(得分:0)

我想您正在使用转换视图,就像这样

...public View getView(int position, View convertView, ViewGroup parent) { ....

你正在改变它在第四个位置的背景,你的视图说在一个页面上有6行,所以每个页面的每第4行都会因为重复使用相同的convertView而变灰。

我不知道我正在解释正确,但如果您正在使用convertview并更改其布局,那么您应该有逻辑重新创建该布局以避免重复使用相同(缓存)视图。