Android 如何预选listview行?

Android 如何预选listview行?,android,listview,Android,Listview,我已经创建了一个自定义列表视图,我想在列表视图中预选一个项目。我在网上尝试了很多东西,但是没有运气。下面是我的感受 lvModifierSet.requestFocusFromTouch(); lvModifierSet.setSelection(1); lvModifierSet.setItemChecked(1, true); lvModifierSet.performItemClick(lvModifierSet.getChildAt(1), 1, lvModifierSet.get

我已经创建了一个自定义列表视图,我想在列表视图中预选一个项目。我在网上尝试了很多东西,但是没有运气。下面是我的感受

lvModifierSet.requestFocusFromTouch();

lvModifierSet.setSelection(1);

lvModifierSet.setItemChecked(1, true);

lvModifierSet.performItemClick(lvModifierSet.getChildAt(1), 1, lvModifierSet.getItemIdAtPosition(1));
这是我的列表视图

<ListView
            android:id="@+id/menu_lv_modifier_set"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginEnd="1dp"
            android:layout_marginRight="1dp"
            android:layout_marginTop="1dp"
            android:layout_weight="1"
            android:background="@color/colorWhite"
            android:divider="@color/colorLightGray"
            android:dividerHeight="1dp"
            android:listSelector="@color/colorLightGray" />

自定义适配器代码

public class ModifierSetListAdapter extends ArrayAdapter<ModifierSet> {

    private Context context;
    private int resourceLayout;
    private List<ModifierSet> modifierSets;

    public ModifierSetListAdapter(Context context, int resource, List<ModifierSet> modifierSets) {
        super(context, resource, modifierSets);
        this.context = context;
        resourceLayout = resource;
        this.modifierSets = modifierSets;
    }

    @Nullable
    @Override
    public ModifierSet getItem(int position) {
        return modifierSets.get(position);
    }

    @NonNull
    @Override
    public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {

        View view = convertView;
        if (view == null) {
            LayoutInflater vi = LayoutInflater.from(context);
            view = vi.inflate(resourceLayout, null);
        }

        ModifierSet modifierSet = modifierSets.get(position);
        view.setId(modifierSet.getMenu_modifier_set_id());


        TextView tvModifierName = view.findViewById(R.id.modifier_set_tv_modifier_name);
        tvModifierName.setText(modifierSet.getModifier_set_name());

        return view;

    }

}
公共类ModifierSetListAdapter扩展了ArrayAdapter{
私人语境;
民营企业布局;
私有列表修改集;
公共ModifierSetListAdapter(上下文上下文、int资源、列表修饰符集){
超级(上下文、资源、修改集);
this.context=上下文;
资源布局=资源;
this.modifierSets=modifierSets;
}
@可空
@凌驾
公共修饰符集getItem(int位置){
返回修饰符集合。获取(位置);
}
@非空
@凌驾
公共视图getView(最终整数位置,@Nullable View convertView,@NonNull ViewGroup父级){
视图=转换视图;
如果(视图==null){
LayoutInflater vi=LayoutInflater.from(上下文);
视图=vi.充气(resourceLayout,null);
}
ModifierSet ModifierSet=ModifierSet.get(位置);
view.setId(modifierSet.getMenu_modifier_set_id());
TextView tvModifierName=view.findViewById(R.id.modifier\u set\u tv\u modifier\u name);
tvModifierName.setText(modifierSet.getModifier_set_name());
返回视图;
}
}

使用
Runnable()尝试类似的操作。


您需要使用
ArrayList
。在模型类中添加
isSelected
布尔参数,如下所示:-

private boolean isSelected;


public boolean isSelected() {
      return isSelected;
}

public void setIsSelected(boolean isSelected) {
      isSelected = isSelected;
}
在您的
Java
类中,我们需要指定特定的项,无论是否选中

YOUR_ARRAYLIST.get(POSITION_WHICH_U_WANT_TO_SELECT).setIsSelected(true);
在adapter类的
getView
方法中,您需要检查视图是否已选中未选中

  public View getView(int position, View convertView, ViewGroup parent) {
            // Get the data item for this position
            ModifierSet dataModel = getItem(position);
            // Check if an existing view is being reused, otherwise inflate the view
            ViewHolder viewHolder; // view lookup cache stored in tag

            final View result;

            if (convertView == null) {

                viewHolder = new ViewHolder();
                LayoutInflater inflater = LayoutInflater.from(getContext());
                convertView = inflater.inflate(R.layout.row_item, parent, false);

                result=convertView;
                convertView.setTag(viewHolder);
            } else {
                viewHolder = (ViewHolder) convertView.getTag();
                result=convertView;
            }

        if(dataModel.get(position).isSelected())
          {
            /**
             * SET THE LISTVIEW'S ITEM SELECTED HERE
             */

          }
         else
          {
            /**
             * SET THE LISTVIEW'S ITEM UN-SELECTED HERE
             */
          }  
      }

添加
lvModifierSet.requestFocusFromTouch()怎么样
setSelection()之前ઽ૯ท 不走运,实际上是自定义对话框中的listviewbox@byteC0de,你看过下面的解决方案了吗?如果有问题,请告诉我
  public View getView(int position, View convertView, ViewGroup parent) {
            // Get the data item for this position
            ModifierSet dataModel = getItem(position);
            // Check if an existing view is being reused, otherwise inflate the view
            ViewHolder viewHolder; // view lookup cache stored in tag

            final View result;

            if (convertView == null) {

                viewHolder = new ViewHolder();
                LayoutInflater inflater = LayoutInflater.from(getContext());
                convertView = inflater.inflate(R.layout.row_item, parent, false);

                result=convertView;
                convertView.setTag(viewHolder);
            } else {
                viewHolder = (ViewHolder) convertView.getTag();
                result=convertView;
            }

        if(dataModel.get(position).isSelected())
          {
            /**
             * SET THE LISTVIEW'S ITEM SELECTED HERE
             */

          }
         else
          {
            /**
             * SET THE LISTVIEW'S ITEM UN-SELECTED HERE
             */
          }  
      }