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