2

我希望在这里解决的问题是,当我单击该项目中的一个项目时,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);
        }
     }
4

2 回答 2

1

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

这是因为 Android 实际上重用行以节省资源和 CPU(当一行从屏幕上滚出时,它会被重用于出现在视图中的新行)。因此,如果您将背景设置为灰色,则可能会再次使用它,并且背景仍然是灰色的。

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

这个链接有一个继承 ArrayAdapter 的例子

于 2010-04-01T04:24:02.977 回答
0

我想你正在像这样使用转换视图

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

并且您在第 4 个位置更改其背景,并且您的视图说在一页上有 6 行,因此由于重用相同的 convertView ,每页的每 4 行都会变灰。

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

于 2011-04-23T20:39:25.893 回答