Android 如何使ListView的第一项在启动时被选为默认项?

Android 如何使ListView的第一项在启动时被选为默认项?,android,android-layout,android-listview,Android,Android Layout,Android Listview,我的应用程序中有一个ListView,ListView有一个选择器。我想在应用程序启动时将此ListView的第一项选为默认项,如何?有人能给点建议吗?THX很多。你可以通过 yourListView.setSelection(0); yourListView.getSelectedView().setSelected(true); 我希望这将帮助您创建一个onItemClickListener,然后使用此代码段,填写适当的值: listView.performItemClick(View v

我的应用程序中有一个ListView,ListView有一个选择器。我想在应用程序启动时将此ListView的第一项选为默认项,如何?有人能给点建议吗?THX很多。

你可以通过

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

我希望这将帮助您

创建一个
onItemClickListener
,然后使用此代码段,填写适当的值:

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

有关更多详细信息。

您可以调用
listview.setSelection(0)。只需确保在弹出
列表后调用此选项即可。如果在填充
列表之前调用它,它将不起作用,因为那时它没有任何数据。

我认为这将起作用,因为我们为listView提供了0个数组索引

//put the below code in get view function 
if(position==0)
{
    convertView.setSelected(true); 
}
ListView.setSelection(0);

如果要单击它以完成其他事件处理,则此选项有效:

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

你可以这样修理它

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

并将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"/>


这是我的工作。我希望这对你有帮助。:)

现在我找到了另一个很好的实现方法

  • 首先,您应该设置ListViewandroid:choiceMode=singleChoice
  • 第二,按照下面的步骤进行

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

    • 以下解决方案适合我:

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

      @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);
      
      listView1.setOnItemClickListener(
      新的AdapterView.OnItemClickListener(){
      公共控件单击(适配器视图适配器,视图v,内部位置,长id){
      adapter.findViewById(GetDeviceDetails.selectedsize).setBackgroundColor(0xFFFFFFF);
      GetDeviceDetails.selectedsize=位置;
      适配器.findViewById(位置).setBackgroundColor(0xFF7F8184);
      Log.d(“所选Id”,“v.getId());
      Log.d(“查找所选Id”,“适配器+adapter.findViewById(0));
      }
      });
      listView1.setSelection(0);
      listView1.setItemChecked(0,true);
      
      这对我很有用。你必须定制适配器。

           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);
      
                  }
              }); 
      
      首先创建模态类
      公共类过滤器bean{
      字符串过滤器\u分类;
      他当选了;
      公选{
      选举产生的回报;
      }
      已选择公共无效设置(已选择布尔值){
      isSelected=已选择;
      }
      公共字符串getFilter_分类(){
      返回过滤器类;
      }
      公共无效集合过滤器类别(字符串过滤器类别){
      this.filter\u catagory=filter\u catagory;
      }
      }
      在适配器类中
      @凌驾
      公共视图getView(最终整数位置、视图转换视图、视图组父视图){
      convertView=LayoutFlater.充气(R.layout.size\u name\u指示器,空);
      txt=(TextView)convertView.findViewById(R.id.key\u TextView);
      setText(getItem(position).getFilter_catagory());
      if(getItem(position).isSelected()){
      setBackgroundColor(context.getResources().getColor(R.color.transparent));
      }否则{
      setBackgroundColor(context.getResources().getColor(R.color.colorWhite));
      }
      返回视图;
      }
      public void updateNameBean(字符串键,布尔值已选中)
      {
      对于(int i=0;i
      
      我想这会对你有所帮助。它对我很有用。

      我用数据绑定解决了这个问题

      使用以下代码隐藏:

      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));
        }
      }
      
      private List\u单元;
      私人单位(选定单位);;
      公共单位选择单位{
      得到{
      如果(\u selectedUnit为空){
      返回_units.Count>0?_units[0]:空;
      }否则{
      返回_selectedUnit;
      }
      }
      设置{
      如果(_selectedUnit!=值){
      _selectedUnit=值;
      已更改的房地产(“选定单位”);
      }
      }
      }
      公共事件属性更改事件处理程序属性更改;
      受保护的虚拟void OnPropertyChanged(字符串propertyName){
      var changed=Property changed;
      如果(已更改!=null){
      PropertyChanged(这是新的PropertyChangedEventArgs(propertyName));
      }
      }
      
      和XAML

      <ListView ItemsSource="{Binding units}"
                SelectedItem="{Binding selectedUnit, Mode=TwoWay}">
      
      
      
      也许你应该在你的问题中提供一些代码,向我们展示你是如何尝试的。我认为你的答案是合适的和有帮助的,但当我把它放在我的代码中(我认为列表中已经填充了)时,它不起作用。可能代码的其他地方出了问题……如果你能发布你是如何编写的代码,那就更好了。@LalitPoptani你能帮我解决这个问题吗?因为我没有提供一些代码片段来帮助你,没有查看你的代码,所以无法猜测你被卡住了。另请参阅完整的示例:@ChiragPatel你能帮我解决这个问题吗@ChiragPatel我们能将列表自动选择为字符串变量吗?请帮助我如何选择列表项w在字符串值的帮助下,此操作有效。一个问题已解决,现在是下一个问题:所选项目未突出显示。WTF Android!此操作将失败,因为位置0可以调用listview获得滚动的n个时间。
      if(position == 0){
              // This is the first item, you need to select this
              //rowview which u inflate under getview 
              rowView.performClick();
      
          }
      
      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));
        }
      }
      
      <ListView ItemsSource="{Binding units}"
                SelectedItem="{Binding selectedUnit, Mode=TwoWay}">