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

Posted

技术标签:

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

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

【问题讨论】:

投反对票,因为不提供一些 sn-p 来帮助你,没有查看你的代码,所以无法猜测你卡在哪里。 完整示例参见:***.com/questions/30409421/… 【参考方案1】:
yourlist.setItemChecked(position,true)

【讨论】:

【参考方案2】:

你可以这样做

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

希望对你有帮助

【讨论】:

@ChiragPatel 请你帮我解决这个问题***.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 你能帮我解决这个问题吗***.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_
    android:layout_  
    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 次,此时列表视图将滚动。

以上是关于如何使 ListView 的第一项在启动时被选为默认值?的主要内容,如果未能解决你的问题,请参考以下文章

gridview中的第一项在AdapterView.OnItemClickListener中不会更改

Espresso 如何点击一个 ImageView 放置在 listview 的第一项?

使用 *ngFor 的 Angular 2 第一项在数组中丢失

浓缩咖啡:单击 ViewPager 内 ListView 中的第一项

使用 Cursor Loader 选择 ListView 中的第一项

ListView 仅显示数组列表中的第一项