如何在列表视图中突出显示单个项目

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;
}