change color of selected listview item

前端 未结 5 1732
囚心锁ツ
囚心锁ツ 2020-12-15 10:07

I want to change color of list item when it will press

For that I did like below,

list_item_selector.xml



        
5条回答
  •  遥遥无期
    2020-12-15 10:26

    Try with a custom adapter this also helps you to have full control over your items and set a default item selected; listView XML and item XML have no special setup.

    public class ListAdapter extends ArrayAdapter {
    
    private final int layoutInflater;
    private Context context;
    private  List items;
    private int mSelectedItem = 0;
    private int TAG_UNSELECTED = 0;
    private int TAG_SELECTED = 1;
    
    public ListAdapter(Context context, int resource, List items) {
        super(context, resource, items);
        this.context = context;
        this.layoutInflater = resource;
        this.items = items;
    }
    
    public void selectItem(int position) {
        mSelectedItem = position;
        notifyDataSetChanged();
    }
    
    
    @Override
    public int getViewTypeCount() {
        return 2;
    }
    
    @Override
    public int getItemViewType(int position) {
        return position == mSelectedItem ? TAG_SELECTED : TAG_UNSELECTED;
    }
    
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(layoutInflater, null);
        }
    
        MyObj myObj = items.get(position);
        TextView textView = (TextView) v.findViewById(R.id.title);
        textView.setText(myObj.title);
    
        int type = getItemViewType(position);
        if(type == TAG_SELECTED) {
            v.setBackgroundColor(Color.parseColor("#1da7ff"));
            textView.setTextColor(Color.parseColor("#ffffff"));
        } else {
            v.setBackgroundColor(Color.parseColor("#f8f8f8"));
            textView.setTextColor(Color.parseColor("#474747"));
        }
    
        return v;
    }
    
    }
    

    Then in your activity:

                ListView listView = (ListView) findViewById(R.id.list_view);
                ListAdapter adapter = new ListAdapter(mContext, R.layout.item_layout, list);
                listView.setAdapter(adapter);
                adapter.selectItem(0); // Default selected item
    
                // Get selected item and update its background
                listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView parent, View v, int position, long id) {
                        adapter.selectItem(position);
                    }
                });
    

提交回复
热议问题