当前位置: 首页 > 知识库问答 >
问题:

列表视图上的一个选定项

爱乐邦
2023-03-14

我做了一个列表视图。计划是,当你选择一个项目时,它应该显示为选中状态(背景颜色改变),当你选择另一个项目时,之前选择的项目再次正常。有办法做到这一点吗?我一直在尝试很多事情,但都没用。。。

这是我目前的代码。。。

/*Listview testing*/
    final ListView listview = (ListView) findViewById(R.id.listView1);
    String[] values = new String[] { 
            "Case White", 
            "Operation Weser-Exercise", 
            "Case Yellow", 
            "April War", 
            "Operation Barbarossa", 
            "D-day" }; 

    final ArrayList<String> list = new ArrayList<String>();
    for (int i = 0; i < values.length; ++i) {
      list.add(values[i]);
    }
    final StableArrayAdapter adapter = new StableArrayAdapter(this,
        android.R.layout.simple_list_item_1, list);
    listview.setAdapter(adapter);

    listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

      @Override
      public void onItemClick(AdapterView<?> parent, final View view,
          int position, long id) {
          //This doesn't work:            
          //listview.findViewById((int) selid).setBackgroundColor(Color.TRANSPARENT);
          view.setSelected(true);
          view.setBackgroundColor(Color.LTGRAY);
          Context context = getApplicationContext();

          CharSequence text = "id: " + id;
          int duration = Toast.LENGTH_SHORT;

          Toast toast = Toast.makeText(context, text, duration);
          toast.show();
          selid = id;
         }
    });

标记其中一个是有效的,但删除选择是我的问题。有什么建议吗?

编辑:我要找的是,在我选择另一个项目之前,它一直处于选中状态

共有2个答案

裴威
2023-03-14

第一件事是将ListView配置为singleChoice,因为只能选择一项:

<ListView
       android:id="@android:id/list"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:choiceMode="singleChoice">
</ListView>

然后,您需要创建一个选择器。这是您将为每个定义的状态配置颜色的地方。所选文件位于res/draable目录中。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
   android:exitFadeDuration="@android:integer/config_mediumAnimTime">

   <item android:drawable="@android:color/holo_orange_dark" android:state_pressed="true"/>
   <item android:drawable="@android:color/holo_green_light" android:state_selected="true"/>
   <item android:drawable="@android:color/holo_green_light" android:state_activated="true"/>

</selector>

然后,在项目布局上,在顶层添加属性activatedBackgroundIndicator:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:orientation="horizontal"
   android:background="?android:attr/activatedBackgroundIndicator">

    <!-- your item content-->
</LinearLayout>

最后,需要将选择器链接到ListView。这可以在ListActivity的onCreate方法或ListFragment的onActivityCreated方法中完成。

this.getListView().setSelector(R.drawable.your_selector);

这就是全部。

//编辑

我没有解释如何改变蓝色。以下是解决方案

创建一个文件*res/drawable/listitem_background。包含以下内容的xml*:

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

用您选择的颜色替换*@color/purple_dark*。

然后,在主题中添加以下行:

<item name="android:activatedBackgroundIndicator">@drawable/listitem_background</item>

视频:http://www.youtube.com/watch?v=BlZmE6Fk40M

夏振国
2023-03-14

我认为问题在于,你的onItemClick方法只对点击的列表项激发。列表中的其他每一项都保持不变。

您需要的是一次更新所有项目的方法。最简单的方法是编写扩展BaseAdapter的自定义适配器,然后调用myAdapter.notifyDataSetChanged()。如果您愿意,我可以提供一个示例,但我建议您查找有关扩展BaseAdapter的教程。

 类似资料:
  • 我的ListView自定义适配器(及其新实现的viewHolder)有一些问题。我有一个列表视图,每个项目都有一个复选框(这里没有新内容)。问题是,如果我的列表中有超过9个项目,当我选中第一个复选框时,第十个将自动选中(第二个与第十一个相同),就像两个项目都有一个监听器一样(我认为在某种程度上是这样)。 我在这里读到了listView、视图回收和ViewHolder解决它的方法的位置问题:如何使我

  • 我有一个列表视图,当我的活动开始时,我想要第一个项目将有背景,其他项目没有任何背景。之后,如果用户选择任何其他项目,则该特定项目的背景现在将为蓝色,其余部分将没有任何背景。请帮帮我。 My layout_effect.xml 设置默认背景的GetView代码 listview的任何我的onclickListner 我的列表视图xml 请帮帮我,我怎么才能解决这个问题,我从昨天开始就被困在里面了。

  • 问题内容: 我有这个数据库存储传感器采集数据, 采集(acq)来自不同控制单元(cu)的固定间隔(日期时间) 每个采集在数据表中存储了许多不同的度量 我需要这种观点: 作为: v1是data.value(例如湿度),其中 acq.id_cu = 1 AND data.id_meas = 100 v2是data.value(例如计数器),其中 acq.id_cu = 2 AND data.id_me

  • 问题内容: 我试图以与从中选择类似的方式选择的列名称。 我似乎找不到解决办法。有没有其他人以前做过此事,或者知道是否有可能? 问题答案: information_schema.columns.Table_name(至少在Sql Server 2000下)包含视图,因此只需使用

  • 我需要在单击ListView时更改选定项目的颜色,以便用户知道单击了什么。 到目前为止,我已经为此编写了以下代码: 它所做的是更改所选项目的背景色,并保持原样,直到我单击另一个项目,使其仅更改当前项目所选的背景色 我还想知道是否有一种XML方法可以做到这一点。到目前为止,我发现: 但我还没有得到之前代码的功能。不过,它所做的是更改背景颜色,并在单击时更改背景颜色,但不使用特定的颜色保留选定的项目

  • 我有两个活动,第一个包含列表视图,当用户单击该列表视图的列表项时,将启动详细信息视图活动(第二个活动)。 现在在第二个活动中,我有2个按钮,NEXT按钮和PREVIOUS按钮,所以当用户单击NEXT按钮时,必须显示第一个活动的下一个列表项。单击上一个按钮时,必须显示上一个列表项。 我在第一个活动中扩展了ArrayAdapter,以显示自定义列表项。适配器上有2个项目,即2个文本视图。 当用户单击并