如何突出显示Listview中的单个项目

时间:2016-01-06 05:57:09

标签: android arrays listview android-listview android-adapter

当我点击列表视图中的任何项目时,该项目突出显示,但是当我单击第二个项目时,它也突出显示。我只希望突出显示一个项目。

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

3 个答案:

答案 0 :(得分:3)

您需要跟踪当前所选元素的位置:

示例:

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

答案 1 :(得分:3)

在你的pojo类中添加boolean标志说

Boolean isSelected;

在其中应用getter和setter。 最初设置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();

    }
};

现在在适配器类的getview中检查列表项是否已检查。

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

答案 2 :(得分:0)

在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);