【问题标题】:One selected item on a listview列表视图上的一个选定项目
【发布时间】:2014-04-13 14:00:48
【问题描述】:

我已经做了一个列表视图。计划是当您选择一个项目时,它应该显示为选中(背景颜色更改),当您选择另一个项目时,之前选择的项目再次正常。有没有办法做到这一点?我一直在尝试一堆东西,但没有任何效果......

这是我目前的代码...

/*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;
         }
    });

标记其中一个是可行的,但是删除选择是我卡住的地方。有什么建议吗?

编辑:我正在寻找的是让它保持选中状态,直到我选择另一个项目

【问题讨论】:

标签: android listview selecteditem


【解决方案1】:

我认为问题在于您的 onItemClick 方法仅针对被点击的列表项触发。列表中的所有其他项目都保持不变。

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

【讨论】:

    【解决方案2】:

    首先要将 ListView 配置为 singleChoice,因为只能选择一项:

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

    然后,您需要创建一个选择器。您将在此处为每个定义的状态配置颜色。选择的文件 在 res/drawable 目录中。

    <?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

    【讨论】:

    • 有效,但我正在寻找的是让它保持选中状态,直到我选择另一个项目......
    • 哦 .. 我的错 :) 我误会了...我稍后会编辑我的代码 :)
    猜你喜欢
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多