android - 使列表视图中的项目默认选中
问题描述
如何在默认情况下选中列表视图中的项目?我知道这已经在以前的 stackoverflow 帖子中得到了回答,但我无法做到这一点。我使用了论坛中指定的许多组合,但没有一个有效。
这是我的代码:
// create the list view
ListView listView = (ListView) view.findViewById(R.id.list);
// create adapter
TimeAdapter adapter = new TimeAdapter(getContext(), stringArray, 3);
// set adapter to the list view
listView.setAdapter(adapter);
listView.setItemChecked(3, true);
listView.setSelection(3);
listView.performItemClick(listView.getSelectedView(), 3, 0);
我的 XML 布局
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.4"
android:choiceMode="singleChoice"
android:listSelector="@color/colorAccent" />
[更新] 我尝试根据您在 getView 中的建议进行修改,但仍然没有帮助:(这一次,很多行被突出显示,而不仅仅是一个!
public class TimeAdapter extends ArrayAdapter<String>{
private Context mContext;
private ArrayList<String> mArrayString;
private int mSelection;
public TimeAdapter(Context context, ArrayList<String> arrayList, int selection) {
super(context, 0);
mArrayString = arrayList;
mContext = context;
mSelection = selection;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View listItemView = convertView;
if (listItemView == null) {
listItemView = LayoutInflater.from(getContext()).inflate(
R.layout.time_item, parent, false);
}
String time = mArrayString.get(position);
TextView mTimeTextView = listItemView.findViewById(R.id.time_text);
mTimeTextView.setText(time);
if (mSelection == position){
listItemView.setSelected(true);
listItemView.setBackgroundColor(mContext.
getColor(R.color.colorAccent));
}
return listItemView;
}
@Override
public String getItem(int position) {
return mArrayString.get(position);
}
@Override
public int getCount() {
return mArrayString.size();
}
}
解决方案
你可以试试这个:
// create the list view
final ListView listView = (ListView) findViewById(R.id.list);
// create adapter
final TimeAdapter adapter = new TimeAdapter(this, stringArray, 3);
// set adapter to the list view
listView.setAdapter(adapter);
listView.setSelection(3);
listView.setItemChecked(3, false);
listView.performItemClick(listView.getSelectedView(), 3, 0);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(ListViewDemo.this, "position is :"+position, Toast.LENGTH_SHORT).show();
adapter.setSelection(position);
}
});
public class TimeAdapter extends ArrayAdapter<String> {
private static final int NOT_SELECTED = -1;
private Context mContext;
private ArrayList<String> mArrayString;
private int mSelection;
public TimeAdapter(Context context, ArrayList<String> arrayList, int selection) {
super(context, 0);
mArrayString = arrayList;
mContext = context;
mSelection = selection;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View listItemView = convertView;
if (listItemView == null) {
listItemView = LayoutInflater.from(getContext()).inflate(
R.layout.list_item, parent, false);
}
String time = mArrayString.get(position);
TextView mTimeTextView = listItemView.findViewById(R.id.text);
mTimeTextView.setText(time);
/* if (mSelection == position) {
convertView.setSelected(true);
mTimeTextView.setTextColor(getResources().getColor(R.color.md_amber_800));
mTimeTextView.setBackground(new ColorDrawable(getResources().getColor(R.color.accent)));
}*/
if (position == mSelection) {
// your color for selected item
listItemView.setBackgroundColor(getResources().getColor(R.color.primary));
} else {
// your color for non-selected item
listItemView.setBackgroundColor(Color.parseColor("#FFFFFF"));
}
return listItemView;
}
@Override
public String getItem(int position) {
return mArrayString.get(position);
}
@Override
public int getCount() {
return mArrayString.size();
}
// if called with the same position multiple lines it works as toggle
public void setSelection(int position) {
if (mSelection == position) {
mSelection = NOT_SELECTED;
} else {
mSelection = position;
}
notifyDataSetChanged();
}
}
推荐阅读
- neo4j - 将 Neo4j 与 Laravel 6 集成,哪个驱动程序?
- python - 理解 python id() 的唯一性
- javascript - TypeError: jest.fn(...).mockResolvedValue 不是函数
- java - 我可以让线程等待锁,然后在释放后跳过它吗?
- swift - 在 Xcode 11 iOS13 中找不到 UNUserNotificationCenter/UserNotification -
- selenium - 在 Selenium IDE 中自动运行另一个测试用例
- r - 从 ggplot2 中提取 facetedn lm 模型
- python - 使用python按顺序生成特定月份的随机日期
- flutter - 在颤振中使用 PreferredSize 小部件有什么用?
- c - spin_unlock 成功,内核模块中没有 spin_lock