如何在列表视图中突出显示单个项目
How to Highlight single item in Listview
当我单击列表视图中的任何项目时,该项目会突出显示,但当我单击第二个项目时,它也会突出显示。我只想突出显示一项。
menu.xml
<ListView
android:id="@+id/list"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.8"
android:background="#50332b"
/>
Menulist.java
lstcategory = (ListView) view.findViewById(R.id.list);
lstcategory.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
lstcategory.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
view.setBackgroundColor(Color.BLUE);
您需要跟踪当前选中元素的位置:
示例:
OnItemClickListener listViewOnItemClick = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View arg1, int position, long id) {
mSelectedItem = position;
mAdapter.notifyDataSetChanged();
}
};
并覆盖适配器的 getView 方法:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final View view = View.inflate(context, R.layout.item_list, null);
if (position == mSelectedItem) {
// set selected your color
}else{
//set default color
}
return view;
}
在 drawable 文件夹中创建一个 row_selector
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@color/white" />
<item android:state_pressed="true" android:drawable="@color/white" />
<item android:state_activated="true" android:drawable="@color/white" />
<item android:drawable="@color/light_gray" />
</selector>
现在将其应用为 android:background="@drawable/row_selector" 用于您行的父视图。
在 java 代码中将 ListView 设置为 CHOICE_MODE_SINGLE
listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
在你的 pojo 中添加布尔标志 class 说
Boolean isSelected;
在其中应用 getter 和设置器。
最初设置 isSelected = false 的所有值,以便不选择任何列表项
现在在 onItem 单击期间将当前对象的 isSelected 设置为 true
像这样
在 onItemClick 中应用这个
OnItemClickListener listViewOnItemClick = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View arg1, int position, long id) {
for(int i =0;i < lstcategory.size();i++}{
lstcategory.get(i).setIsSelected(false);
}
lstcategory.get(position).setIsSelected(true);
mAdapter.notifyDataSetChanged();
}
};
现在获取适配器的视图class 检查列表项是否已选中。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final View view = View.inflate(context, R.layout.item_list, null);
if (lstcategory.get(position).getIsSelected()) {
// set selected your color
}else{
//set default color
}
return view;
}
当我单击列表视图中的任何项目时,该项目会突出显示,但当我单击第二个项目时,它也会突出显示。我只想突出显示一项。
menu.xml
<ListView
android:id="@+id/list"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.8"
android:background="#50332b"
/>
Menulist.java
lstcategory = (ListView) view.findViewById(R.id.list);
lstcategory.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
lstcategory.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
view.setBackgroundColor(Color.BLUE);
您需要跟踪当前选中元素的位置:
示例:
OnItemClickListener listViewOnItemClick = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View arg1, int position, long id) {
mSelectedItem = position;
mAdapter.notifyDataSetChanged();
}
};
并覆盖适配器的 getView 方法:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final View view = View.inflate(context, R.layout.item_list, null);
if (position == mSelectedItem) {
// set selected your color
}else{
//set default color
}
return view;
}
在 drawable 文件夹中创建一个 row_selector
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@color/white" />
<item android:state_pressed="true" android:drawable="@color/white" />
<item android:state_activated="true" android:drawable="@color/white" />
<item android:drawable="@color/light_gray" />
</selector>
现在将其应用为 android:background="@drawable/row_selector" 用于您行的父视图。
在 java 代码中将 ListView 设置为 CHOICE_MODE_SINGLE
listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
在你的 pojo 中添加布尔标志 class 说
Boolean isSelected;
在其中应用 getter 和设置器。 最初设置 isSelected = false 的所有值,以便不选择任何列表项
现在在 onItem 单击期间将当前对象的 isSelected 设置为 true 像这样
在 onItemClick 中应用这个
OnItemClickListener listViewOnItemClick = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View arg1, int position, long id) {
for(int i =0;i < lstcategory.size();i++}{
lstcategory.get(i).setIsSelected(false);
}
lstcategory.get(position).setIsSelected(true);
mAdapter.notifyDataSetChanged();
}
};
现在获取适配器的视图class 检查列表项是否已选中。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final View view = View.inflate(context, R.layout.item_list, null);
if (lstcategory.get(position).getIsSelected()) {
// set selected your color
}else{
//set default color
}
return view;
}