highlighting selected item in custom list view using context menu?

▼魔方 西西 提交于 2019-12-11 10:18:16

问题


I've been trying to set my background colour on this list view and with following multiple tutorials it just doesn't come up, yet no errors are shown.

What I've got is an xml file called colours in the values folder:

<resources>
    <drawable name="red_colour">#6D0E0E</drawable>
</resources>

Which links to an xml in the drawable folder:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:state_pressed="true"
    android:state_activated="true"
    android:drawable="@drawable/red_colour">
</item>

</selector>

I've tried placing the following code android:background:@id"colourhighlight.xml" literally everywhere based on various tutorials yet no luck?

Any advice? Please help...

I've got one main class with a context menu:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_contacts);

        // The contacts from the contacts content provider is stored in this cursor
        mMatrixCursor = new MatrixCursor(new String[] { "_id","name","photo","details"} );

        // Adapter to set data in the listview
        mAdapter = new SimpleCursorAdapter(getBaseContext(),
                R.layout.lv_layout,
                null,
                new String[] { "name","photo","details"},
                new int[] { R.id.tv_name,R.id.iv_photo,R.id.tv_details}, 0);

        // Getting reference to listview
        final ListView lstContacts = (ListView) findViewById(R.id.lst_contacts);

        // Setting the adapter to listview
        lstContacts.setAdapter(mAdapter);

        // Creating an AsyncTask object to retrieve and load listview with contacts
        ListViewContactsLoader listViewContactsLoader = new ListViewContactsLoader();

        // Starting the AsyncTask process to retrieve and load listview with contacts
        listViewContactsLoader.execute();

        //Selecting and highlighting the elements in the listview
        lstContacts.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                view.setActivated(true);
            }
        });

        //Creating the context menu and the options for it
        listview = (ListView) findViewById(R.id.lst_contacts);
        listview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
        listview.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
            @Override
            public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
                count = count+1;
                mode.setTitle(count + " Contacts Selected");


            }

            @Override
            public boolean onCreateActionMode(ActionMode mode, Menu menu) {

                MenuInflater inflater = mode.getMenuInflater();
                inflater.inflate(R.menu.contact_context_menu, menu);

                return true;
            }

            @Override
            public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
                return false;
            }

            @Override
            public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                switch(item.getItemId()){
                    case R.id.delete_id:
                        Toast.makeText(getBaseContext(), count + " Contacts Deselected", Toast.LENGTH_SHORT).show();
                        count = 0;
                        mode.finish();
                        return true;
                        //break;
                    default:
                       return false; //break;
                }

                //return false;
            }

            @Override
            public void onDestroyActionMode(ActionMode mode) {

            }
        });

    }

lv_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
   >

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/iv_photo"
        android:maxHeight="80dp"
        android:maxWidth="80dp"
        android:adjustViewBounds="true"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:id="@+id/tv_name"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/iv_photo"
        android:layout_toEndOf="@+id/iv_photo" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:id="@+id/tv_details"
        android:layout_below="@+id/tv_name"
        android:layout_toRightOf="@+id/iv_photo"
        android:layout_toEndOf="@+id/iv_photo" />
</RelativeLayout>

Main layout.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.example.ankhit.saveme.UserContacts"
    android:background="@drawable/colourhighlight"
    >

    <ListView
        android:id="@+id/lst_contacts"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/button"
        />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/instructions"
        android:id="@+id/button"
        android:onClick="showInstructions"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" />

</RelativeLayout>

回答1:


@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) 
{
    try 
    {
        final int checkedCount = listView.getCheckedItemCount();
        mode.setTitle(""+checkedCount);

        if (checked)
        {
            adapter.setNewSelection(position, checked);                    
        }
        else 
        {
            adapter.removeSelection(position);                 
        }
        adapter.notifyDataSetChanged();
    }
    catch (Exception e) 
    {
        e.printStackTrace();
    }
}

add these methods in your adapter class

private HashMap<Integer, Boolean> mSelection = new HashMap<Integer, Boolean>();
public void setNewSelection(int position, boolean value) 
{
    mSelection.put(position, value);
}

public boolean isPositionChecked(int position) 
{
    Boolean result = mSelection.get(position);
    return result == null ? false : result;
}

public Set<Integer> getCurrentCheckedPosition() {
    return mSelection.keySet();
}

public void removeSelection(int position) {
    mSelection.remove(position);
}

public void clearSelection() {
    mSelection = new HashMap<Integer, Boolean>();
}

call this method inside getView() method of adapter it works properly

convertView.setBackgroundColor(mContext.getResources().getColor(android.R.color.transparent));
if (mSelection.get(position) != null) 
{
    convertView.setBackgroundColor(mContext.getResources().getColor(R.color.message_selector_holo_blue));
                }



回答2:


If you want highlighting selected row completely then change the background color of the convertview

lstContacts.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            view.setBackgroundColor(mContext.getResources().getColor(android.R.color.transparent));


        }
    });


来源:https://stackoverflow.com/questions/28976702/highlighting-selected-item-in-custom-list-view-using-context-menu

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!