【问题标题】:ListView Item selection AndroidListView 项目选择 Android
【发布时间】:2013-08-08 05:56:16
【问题描述】:

我有一个列表视图,我希望当我的活动开始时第一个项目将有背景,而其他项目没有任何背景。之后,如果用户选择任何其他项目,那么该特定项目的背景将现在是蓝色的,其余的没有任何背景。请帮助我。

我的layout_effect.xml

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

    <item android:state_focused="true">
    <shape>
        <solid android:color="#ffffff" />
    </shape>
</item>
    <item>
    <shape>
        <solid android:color="#00a7eb" />
    </shape>
</item>
</selector>

我设置默认背景的 GetView 代码

public View getView(int position, View convertView, ViewGroup parent) { 
        if(position == 0){

            vi.setBackgroundResource(R.drawable.selection_effect);
            vi.setSelected(true);

            }
        }

任何我的列表视图的 onclickListner

onewayListView .setOnItemClickListener(new OnItemClickListener() {


        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub


        Toast.makeText(getBaseContext(), "Clicked", 1000).show();
        }
    });

我的列表视图 xml

<ListView
            android:id="@+id/lvDepartures"
            android:layout_weight="1"
            android:layout_marginLeft="5dp"
            android:choiceMode="singleChoice"
            android:layout_height="wrap_content"
            android:listSelector="@drawable/selection_effect"
            android:layout_width="wrap_content"/>

请帮助我如何解决我从过去 1 天开始陷入困境的问题。

【问题讨论】:

    标签: android android-layout android-intent android-listview


    【解决方案1】:

    为此,您可以创建一个选择器并将其应用于 row.xml 的父视图

    • 在 strings.xml 中定义颜色

      &lt;color name="blue"&gt;#009FE3&lt;/color&gt;

    • 创建选择器

      <item android:drawable="@color/blue" android:state_activated="true" />
      <item android:drawable="@color/blue" android:state_focused="true" />
      

    现在将其应用为 android:background="@drawable/row_selector" 以获取行的父视图。

    • 在java代码中设置ListView为CHOICE_MODE_SINGLE

      listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

    • 最后将适配器设置为您的 ListView。

      listview.setAdapter(adapter);

    • 为了在 ListView 中选择默认项,

      listview.setItemChecked(position, true);

    I had created a demo example for the same you can download it from my github

    【讨论】:

    • 那么 Activity 开始时默认选择的项目是什么
    • 不,刚打电话给listview.setAdapter(adapter)
    • onewaydata=new OneWayFlightResult(this, flightData); onewayListView.setAdapter(onewaydata);
    • 天哪!!!,如果您不知道 ListView 中的position,那么您不应该进一步编码,请阅读文档!
    • onewaydata=new OneWayFlightResult(this, flightData); onewayListView.setItemChecked(0, true); onewayListView.setAdapter(onewaydata);我已经这样做了,但它不工作它在活动开始时默认选择第一个休息工作正常
    【解决方案2】:

    为列表视图创建选择器

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:drawable="@drawable/button_pressed_yellow"
              android:state_pressed="true" />
        <item android:drawable="@drawable/button_focused_orange"
              android:state_focused="true" />
        <item android:drawable="@drawable/button_normal_green" />
    </selector>
    

    setOnItemClickListener写如下函数

    listView.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
    
                    Toast.makeText(getApplicationContext(),
                    ""+position, Toast.LENGTH_SHORT).show();
                }
            });
    

    【讨论】:

    • 请查看我的 layout_effect.xml。我正在使用这个,所以第一个被选中默认但是当我单击列表视图中的其他项目时,默认选中项目的属性保持不变,这就是问题跨度>
    【解决方案3】:

    OnListItem 单击将选定位置传递给适配器并再次设置适配器 并在适配器中检查是否选择了位置然后设置背景,否则不设置背景。

    【讨论】:

      【解决方案4】:

      你应该检查一下:

      public View getView(int position, View convertView, ViewGroup parent) { 
          if(position%2 == 0){
      
              vi.setBackgroundResource(R.drawable.selection_effect);
              vi.setSelected(true);
      
              }else{
      
               // set another background.
      
              }
          }
      

      【讨论】:

      • 请查看我的 layout_effect.xml。我正在使用这个,所以第一个被选中默认但是当我单击列表视图中的其他项目时,默认选中项目的属性保持不变,这就是问题跨度>
      【解决方案5】:

      我不确定,但请尝试将 listView.setSelection(position); 放入 listview 的 setOnItemClickListener

      【讨论】:

        【解决方案6】:

        删除列表视图中的默认列表选择器或将其设置为空:

           <ListView
                android:id="@+id/listView1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:listSelector="@null" >
            </ListView>
        

        希望这会有所帮助。

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多