如何为android中的listview提供颜色

时间:2014-03-13 17:02:18

标签: java android listview

我有一个列表视图,其中我想在按下时为行提供背景颜色。当我选择一个项目时,它会改变颜色,但问题是当我向下滚动其他行时也有颜色我不想那样。

这是我的代码:  提前致谢

listview.setOnItemClickListener(new AdapterView.OnItemClickListener(){

          @Override
          public void onItemClick(AdapterView<?> parent, View view,
              int position, long id) {
              final String item = (String) parent.getItemAtPosition(position); 
                  Toast.makeText(getBaseContext(), item, Toast.LENGTH_LONG).show();
                  view=parent.getChildAt(position);
                  view.setBackgroundColor(Color.GREEN);

          }
          });

}

3 个答案:

答案 0 :(得分:0)

我认为您应该在适配器中处理它。列表视图重新使用了元素,在您的情况下,滚动时将重用具有绿色背景的元素。相反,您应该告诉您的适配器点击了哪个项目

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

          @Override
          public void onItemClick(AdapterView<?> parent, View view,
              int position, long id) {
                   ((YourAdpater)listView.getAdapter()).setSelected(position);

          }
          });

然后在适配器的getView()中,如果当前位置等于所选位置,则可以设置背景...

或者查看listview的选择模式http://developer.android.com/reference/android/widget/AbsListView.html#attr_android:choiceMode

我对它并不熟悉,但它可能会有所帮助......

答案 1 :(得分:0)

处理此问题的最好方法是设置listview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);,它允许您选择多个列表项。

要突出显示所选项目,您只需创建一个自定义背景选择器,该选择器定义项目在哪种状态下的外观。对于你的例子,这将是这样的:

selector.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@android:color/white" android:state_activated="false"/>
    <item android:drawable="@android:color/green" android:state_activated="true"/>

</selector> 

将此文件放在drawable文件夹中,并将列表项目设为此背景,如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/selector">

    ... 

 </LinearLayout>

这样您就不必处理对商品的点击 您可以通过listview.getCheckedItemPositions()

检索所选项目

答案 2 :(得分:0)

要突出显示ListView,您不必手动为它们着色,Android已经有了它的功能。

m_ResultsArrayAdapter = new ArrayAdapter(this,android.R.layout.simple_list_item_activated_1,m_ResultsArray)

使用simple_list_item_activated_1而不是使用simple_list_item_1。这将允许突出显示您的列表,您甚至可以使用

检查哪一个被检查

this.m_ResultsListView.getCheckedItemPosition();

希望这能回答你的问题:&gt;