How to make the first item of a ListView to be selected as default at startup?

前端 未结 13 1020
甜味超标
甜味超标 2020-12-11 16:08

There is a ListView in my App and the ListView has a selector. I want to make the first item of this ListView to be selected as default at the very

相关标签:
13条回答
  • 2020-12-11 16:46

    You can fix it like this.

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

    Update XML layout with single choice.

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

    and set listview background XML as 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"/>
    

    0 讨论(0)
  • 2020-12-11 16:46

    I have used data binding to solve this,

    using the following codebehind:

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

    and XAML

    <ListView ItemsSource="{Binding units}"
              SelectedItem="{Binding selectedUnit, Mode=TwoWay}">
    
    0 讨论(0)
  • 2020-12-11 16:48

    Below solution works for me:

    Setting background/View Id on get View & using the setOnItemClickListener of the List View

    @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;
    }
    

    In the Activity on Create :

    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);
    
    0 讨论(0)
  • 2020-12-11 16:51
    //put the below code in get view function 
    if(position==0)
    {
        convertView.setSelected(true); 
    }
    
    0 讨论(0)
  • 2020-12-11 16:53

    This work for me. I hope this will help you. :)

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

    now i found another good way to implement this.

    • Firstly,you should set ListView android:choiceMode=singleChoice
    • Secondly,just go ahead as follow,

          int defaultPositon = 0;
          int justIgnoreId = 0;
          mListView.setItemChecked(defaultPositon, true);
          mListView.performItemClick(mListView.getSelectedView(), defaultPositon, justIgnoreId);
      
    0 讨论(0)
  • 2020-12-11 16:55
    yourlist.setItemChecked(position,true)
    
    0 讨论(0)
提交回复
热议问题