【问题标题】:How to change ListView Selected items color from default to red without using selector [duplicate]如何在不使用选择器的情况下将 ListView 选定项目的颜色从默认更改为红色 [重复]
【发布时间】:2013-04-04 05:08:20
【问题描述】:

我正在开发板球应用程序。我的目标是在 ListView 中为特定球队选择球员。在这里,我可以从列表中选择多个玩家。我正在使用带有多项选择 Listview 的简单适配器。

          adapter=new ArrayAdapter<String>(this,R.layout.custom_list_view,R.id.textView_color,playersName);
    lvview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

我使用checkedTextView 进行多项选择。下面是我的带有 CheckedTextView 的 custom_list_view

       <CheckedTextView
   android:id="@+id/textView_color"
   android:layout_width="fill_parent"
   android:layout_height="?android:attr/listPreferredItemHeight"
   android:textAppearance="?android:attr/textAppearanceLarge"
   android:gravity="center_vertical"
   android:checkMark="?android:attr/listChoiceIndicatorMultiple"
   android:paddingLeft="6dip"
   android:paddingRight="6dip"
   android:textColor="#FFffFF"
   />

现在我的问题是当用户从列表中选择特定播放器时,我想更改列表视图的颜色。它喜欢向用户显示选择了哪些玩家。为了与未选择的玩家区分开来,我将选定玩家的颜色更改为红色。

    lvview.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View v, int position,long id) {
            // TODO Auto-generated method stub
            SparseBooleanArray checked = lvview.getCheckedItemPositions();      

            if(checked.get(position))
            {
                //chkTextView.setTextColor(Color.GREEN);

                counter_selected++;
                selectedCounterText.setText("" + counter_selected);                 
            }
            else
            {
                counter_selected--;
                selectedCounterText.setText("" + counter_selected);
            }
        }
    }); 

如何将所选玩家的颜色从默认颜色更改为红色。我正在努力做到这一点..请帮我找出来..

【问题讨论】:

  • 是否取消注释 chkTextView.setTextColor(Color.GREEN); 将颜色更改为 GREEN
  • 表示当用户单击任何列表项时,您想要更改 TextView 文本颜色。对吗?
  • 向我们展示适配器代码 OP
  • @Ajay_Addon 你是对的
  • @Nezam 我正在使用适配器代码。我正在使用带有 listview_multiplechoice 的简单适配器

标签: android android-listview


【解决方案1】:

使用下面的代码得到答案

在 mainActivity 适配器类中

   adapter=new ArrayAdapter<String>(getApplicationContext(), R.layout.text_view,R.id.textView1,players);

    lvview.setAdapter(adapter);

main.xml 如下所示

<ListView
    android:id="@+id/list"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="8.5"
    android:cacheColorHint="#00000000" 
     />

我的自定义布局字段如下所示

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginTop="23dp"
    android:text="TextView"
    android:textColor="#ffffff" />

<CheckBox
    android:id="@+id/checkBox1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/textView1"
    android:layout_alignBottom="@+id/textView1"
    android:layout_alignParentRight="true"
    android:focusable="false"
  android:focusableInTouchMode="false"
    />

并且在 ListView 的 MainActivity onitem 点击监听器中,我调用了自定义布局视图,代码如下

            lvview.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> l, View v, int position,
                long id) {
            // TODO Auto-generated method stub
            SparseBooleanArray checked = lvview.getCheckedItemPositions();  
            checkedText=(CheckBox) v.findViewById(R.id.checkBox1);
            checkedList=(TextView) v.findViewById(R.id.textView1);
            if(checkedText.isChecked()==false)
            {
                counter_selected++;
                checkedText.setChecked(true);
                checkedList.setTextColor(Color.RED);
                selectedCounterText.setText("" + counter_selected);                 

            }
            else
            {
                counter_selected--;
                checkedText.setChecked(false);
                 checkedList.setTextColor(Color.WHITE);
                 selectedCounterText.setText("" + counter_selected);        
            }
        }
    });

它解决了我的问题..

【讨论】:

    【解决方案2】:

    您必须使用 statelist drawable 来定义事件的背景,为了方便起见,这是一个非常相似的问题,可能会对您有所帮助。 listview

    【讨论】:

    • 仔细阅读我的问题。我不想问选择器。当用户单击列表视图时,我想更改文本颜色。
    • 但我没有使用自定义适配器
    【解决方案3】:

    首先,你可以定义一个选择器xml如下

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true" android:drawable="@color/red" />
        <item android:drawable="@drawable/listitem_normal" />
    </selector>
    

    然后您可以使用 android:listSelector="@drawable/listitem_selector" 为 ListItem 设置 Selector,如下所示:

    <ListView 
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:listSelector="@drawable/listitem_selector"
       />
    

    【讨论】:

      【解决方案4】:

      问题是不可能通过简单的适配器来做到这一点(你已经使用过)。

      您需要定义自定义行项目。您需要为绑定到列表视图的每个列表项定义自定义 XML 布局。因此,您需要创建一个具有getView() 方法的customAdapter。在其中,您可以轻松获取行的子 TextView 并更改其属性。

      Follow this tutorial.

      【讨论】:

      • 我知道可以在 customAdapter 中做到这一点。但是当用户单击添加按钮时,我想将所选项目传递给另一个列表视图...然后我将如何在自定义适配器中执行此操作
      • 这是一个广泛的问题,但我可以给你一个想法。你只需要在 Activity 中保存一个全局变量,它会在 customAdapter 代码中被覆盖,然后你在后面的Activity eventListener 看到这个答案:stackoverflow.com/a/8726923/1221203 尝试一些代码,当你遇到问题时,用你尝试过的代码提出问题。如果这解决了您发布的问号,则将其作为答案。
      • 得到了我的问题的答案...c 我的答案在下面..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 2015-12-06
      • 2015-01-07
      • 2016-03-21
      • 2016-05-26
      相关资源
      最近更新 更多