【问题标题】:How to make the first item of a ListView to be selected as default at startup?如何使 ListView 的第一项在启动时被选为默认值?
【发布时间】:2012-03-23 13:40:05
【问题描述】:

我的 App 中有一个 ListView,而 ListView 有一个选择器。我想在 App 启动 时将这个 ListView 的第一项设为 默认,如何?任何人都可以提供一些提示吗?非常感谢。

【问题讨论】:

标签: android android-layout android-listview


【解决方案1】:
yourlist.setItemChecked(position,true)

【讨论】:

    【解决方案2】:

    你可以这样做

    yourListView.setSelection(0);
    yourListView.getSelectedView().setSelected(true);
    

    希望对你有帮助

    【讨论】:

    • @ChiragPatel 请你帮我解决这个问题stackoverflow.com/questions/18099756/…
    • @ChiragPatel 我们可以自动选择列表到字符串变量中吗?请帮助我如何在字符串值的帮助下选择列表项
    【解决方案3】:

    这对我有用。我希望这能帮到您。 :)

     @Override
        public View getView(int position, View convertView, ViewGroup parent) {
    
        // do someting...
        if(position == 0){
            mListView.performItemClick(convertView, 0, 0);
        }
    
     }
    

    现在我找到了另一种实现此功能的好方法。

    • 首先,你应该设置ListView android:choiceMode=singleChoice
    • 其次,按照下面的方式进行,

          int defaultPositon = 0;
          int justIgnoreId = 0;
          mListView.setItemChecked(defaultPositon, true);
          mListView.performItemClick(mListView.getSelectedView(), defaultPositon, justIgnoreId);
      

    【讨论】:

    • 这行得通。解决了一个问题,现在是下一个问题:所选项目未突出显示。 WTF 安卓!
    【解决方案4】:

    我认为这会起作用,因为我们已将 0 数组索引分配给 listView

    ListView.setSelection(0);
    

    【讨论】:

      【解决方案5】:
      //put the below code in get view function 
      if(position==0)
      {
          convertView.setSelected(true); 
      }
      

      【讨论】:

        【解决方案6】:

        创建一个onItemClickListener,然后使用这个sn-p,填写适当的值:

        listView.performItemClick(View view, int position, long id);
        

        See the docs 了解更多详情。

        【讨论】:

        • 也许你应该在你的问题中提供一些代码来向我们展示你是如何尝试的。
        【解决方案7】:

        您可以拨打listview.setSelection(0);。只需确保在填充 List 后调用它即可。如果您在填充 List 之前调用它,它将不起作用,因为那时它没有任何数据。

        【讨论】:

        • 我认为您的答案是合适且有帮助的,但是当我将其放入我认为已填充列表的代码中时它不起作用。可能代码的其他地方有问题.. ....
        • 如果你能发布你写的代码会更好。
        • @LalitPoptani 你能帮我解决这个问题吗stackoverflow.com/questions/18099756/…
        【解决方案8】:

        以下解决方案对我有用:

        在获取视图和使用列表视图的 setOnItemClickListener 时设置背景/视图 ID

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;
            if (v == null) {
                LayoutInflater vi = (LayoutInflater)
                        ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(R.layout.listitems, null);
            }
            ListItem m = items.get(position);
        
            if (m != null) {
        
                TextView txt = (TextView)v.findViewById(R.id.textView);
                txt.setText(m.Item);
        
            }
        
            // set selected item
            LinearLayout ActiveItem = (LinearLayout) v;
            v.setId(position);
            if (position == GetDeviceDetails.selectedsize)
            {
                ActiveItem.setBackgroundColor(0xFF7F8184);
            }
            return v;
        }
        

        在创建活动中:

        listView1.setOnItemClickListener(
                    new AdapterView.OnItemClickListener() {
                        public void onItemClick(AdapterView<?> adapter, View v, int position, long id) {
                            adapter.findViewById(GetDeviceDetails.selectedsize).setBackgroundColor(0xFFFFFFF);
                            GetDeviceDetails.selectedsize = position;
                            adapter.findViewById(position).setBackgroundColor(0xFF7F8184);
                            Log.d("Selected Id", "" + v.getId());
                            Log.d("find Selected Id", "" + adapter.findViewById(0));
                        }
                    });
            listView1.setSelection(0);
            listView1.setItemChecked(0, true);
        

        【讨论】:

          【解决方案9】:

          如果你想点击它来完成额外的事件处理,这很有效:

          listView.getAdapter().getView(position, null, null).performClick();
          

          【讨论】:

            【解决方案10】:

            你可以这样修复它。

            //set list adapter, then
            lv.setItemChecked(1, true);//position 1
            lv.setSelection(1);//position 1
            

            使用单选更新 XML 布局。

            <ListView
                android:id="@+id/lv"
                android:layout_width="match_parent"
                android:layout_height="match_parent"  
                android:background="@drawable/list_item_background"
                android:cacheColorHint="#FFFFFF"
                android:choiceMode="singleChoice"
                android:dividerHeight="1dip" >
            </ListView>
            

            并将列表视图背景 XML 设置为 list_item_background.xml,

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

            【讨论】:

              【解决方案11】:

              这对我有用。你必须制作自定义适配器。

                   First Create Modal Class
              
                      public class FilterBean {
              
                       String filter_catagory;
                               boolean isSelected;
              
                          public boolean isSelected() {
                              return isSelected;
                          }
              
                          public void setSelected(boolean selected) {
                              isSelected = selected;
                          }
              
                        public String getFilter_catagory() {
                              return filter_catagory;
                          }
              
                          public void setFilter_catagory(String filter_catagory) {
                              this.filter_catagory = filter_catagory;
                          }
              
                      }
              
              
                  In Adapter Class
              
                  @Override
                      public View getView(final int position, View convertView, ViewGroup parent) {
                          convertView = layoutInflater.inflate(R.layout.size_name_indicator, null);
                          txt = (TextView) convertView.findViewById(R.id.key_textView);
                          txt.setText(getItem(position).getFilter_catagory());
              
                          if(getItem(position).isSelected()){
                              txt.setBackgroundColor(context.getResources().getColor(R.color.transparent));
                          }else {
              
                              txt.setBackgroundColor(context.getResources().getColor(R.color.colorWhite));
                          }
              
              
                          return convertView;
                      }
              
                   public void updateNameBean(String key,boolean checked)
                      {
              
                          for(int i=0;i<getCount();i++)
                          {
                              FilterBean filterBean =  getItem(i);
                              if(filterBean.getFilter_catagory().equals(key))
                              {
                                  filterBean.setSelected(checked);
                              }else {
                                  filterBean.setSelected(false);
                              }
                          }
                          notifyDataSetChanged();
                      }
              
              In Filter Activity or Fragment
              
               filter_listView.setAdapter(filterNameAdapter);
                             filterNameAdapter.updateNameBean(filterNameAdapter.getItem(0).getFilter_catagory(),true);
                      filter_listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                          @Override
                          public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
                              String key = filterNameAdapter.getItem(position).getFilter_catagory();
                              filterNameAdapter.updateNameBean(filterNameAdapter.getItem(position).getFilter_catagory(),true);
              
                          }
                      }); 
              

              【讨论】:

                【解决方案12】:

                我已经使用数据绑定来解决这个问题,

                使用以下代码隐藏:

                private List<Unit> _units;
                private Unit _selectedUnit;
                public Unit selectedUnit{
                  get{
                    if (_selectedUnit is null){
                      return _units.Count > 0 ? _units[0] : null;
                    }else{
                      return _selectedUnit;
                    }
                  }
                  set{
                    if (_selectedUnit != value){
                      _selectedUnit = value;
                      OnPropertyChanged("selectedUnit");
                    }
                  }
                }
                public event PropertyChangedEventHandler PropertyChanged;
                protected virtual void OnPropertyChanged(string propertyName){
                  var changed = PropertyChanged;
                  if (changed != null){
                    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
                  }
                }
                

                和 XAML

                <ListView ItemsSource="{Binding units}"
                          SelectedItem="{Binding selectedUnit, Mode=TwoWay}">
                

                【讨论】:

                  【解决方案13】:
                  if(position == 0){
                          // This is the first item, you need to select this
                          //rowview which u inflate under getview 
                          rowView.performClick();
                  
                      }
                  

                  我认为这会对你有所帮助。它对我有用

                  【讨论】:

                  • 这将失败,因为位置 0 可以调用 n 次,此时列表视图将滚动。
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-11-04
                  • 1970-01-01
                  • 2014-05-26
                  • 1970-01-01
                  • 2017-07-18
                  • 1970-01-01
                  • 2015-08-29
                  相关资源
                  最近更新 更多