自定义适配器,选中项背景 [英] Custom adapter, selected item background

查看:23
本文介绍了自定义适配器,选中项背景的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

自定义适配器视图有问题.我尝试在 Click 事件上更改 view 的背景.我有 AdapterView.OnItemClickListener,在那里我得到选定的项目,并调用 myListView.invalidate();

失效后,调用适配器getView(...).这里的代码:

@覆盖public View getView(int position, View convertView, ViewGroup parent) {

 View row = convertView;ProjectAdapterData projectItem;如果(行==空){LayoutInflater inflater = LayoutInflater.from(context);row = inflater.inflate(R.layout.project_small_item_layout, null);ProjectAdapterData projectAdapterData = new ProjectAdapterData();row.setTag(projectAdapterData);name = (TextView)row.findViewById(R.id.txtObjectName);if (objectData[position].Name!= null)name.setText(objectData[位置].Name);地址 = (TextView)row.findViewById(R.id.txtObjectAdress);if (objectData[position].Adress != null)地址.setText(objectData[位置].地址);}别的 {background = (RelativeLayout)row.findViewById(R.id.rlProjectBackground);if (objectData[position].isSelected)background.setBackgroundColor(context.getResources().getColor(R.color.cProjectSelected));别的background.setBackgroundResource(R.color.cProjectUnSelected);//这是调用,但没有结果row.invalidate();}返回行;}

我的问题,为什么背景没有改变?

我的选择器列表

 <item android:state_selected="true"android:color="@color/cProjectSelected"/><item android:state_selected="false"android:color="@color/cProjectUnSelected"/></选择器>

解决方案

你可以使用选择器来突出显示项目

在drawable文件夹中创建一个xml文件

list_selector.xml

并在 xml 中为您的列表视图设置 listSelector,例如

android:listSelector="@drawable/list_selector"

颜色.xml

对于 custom_list_item 布局应该是

</LinearLayout>

<块引用>

并且您的应用程序的最低版本应该是 11

I have a problem whith custom adapter view. I try, change background of view on Click event. I have AdapterView.OnItemClickListener, where i get selected item, and calling myListView.invalidate();

After invalidate, calling adapters getView(...). Here code for this:

@Override public View getView(int position, View convertView, ViewGroup parent) {

    View row = convertView;
    ProjectAdapterData projectItem;


    if (row == null) {

        LayoutInflater inflater = LayoutInflater.from(context);
        row = inflater.inflate(R.layout.project_small_item_layout, null);

        ProjectAdapterData projectAdapterData = new ProjectAdapterData();

        row.setTag(projectAdapterData);
        name = (TextView)row.findViewById(R.id.txtObjectName);
        if (objectData[position].Name!= null)
            name.setText(objectData[position].Name);
        adress = (TextView)row.findViewById(R.id.txtObjectAdress);
        if (objectData[position].Adress != null)
            adress.setText(objectData[position].Adress);
    }
    else {
        background = (RelativeLayout)row.findViewById(R.id.rlProjectBackground);
        if (objectData[position].isSelected)
            background.setBackgroundColor(context.getResources().getColor(R.color.cProjectSelected));
        else
            background.setBackgroundResource(R.color.cProjectUnSelected); //it's calls, but no result
        row.invalidate();
    }
    return row;
}

My question, why background doesn't change?

My selector_list

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_selected="true"
          android:color="@color/cProjectSelected"/>
        <item android:state_selected="false"
          android:color="@color/cProjectUnSelected"/>
    </selector>

解决方案

you can use selector to highlight item

In drawable folder create a xml file

list_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_mediumAnimTime">

    <item android:drawable="@color/blue" android:state_activated="true"/>
    <item android:drawable="@color/blue" android:state_selected="true"/>
    <item android:drawable="@color/transparent"/>

</selector>

and set listSelector in xml for your listview like

android:listSelector="@drawable/list_selector"

color.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <color name="BLACK">#000000</color>
    <color name="WHITE">#FFFFFF</color>
    <color name="light_grey">#a5acb0</color>
    <color name="brown">#525964</color>
    <color name="dark_grey">#212121</color>
    <color name="aqua">#a6b1ba</color>
    <color name="red_cherry">#C9282D</color>
    <color name="silver">#A9A9A9</color>
    <color name="black">#000000</color>
    <color name="transparent">#00000000</color>
    <color name="white">#FFFFFF</color>
    <color name="blue">#00aceb</color>
    <color name="spiritclips_bck">#8AB8E0</color>
    <color name="translucent_black">#55000000</color>
    <color name="grid_bck">#627583</color>
    <color name="grey">#393430</color>
    <color name="dark_grey_bg">#1f1c17</color>
    <color name="login_font_color_1">#546778</color>
    <color name="login_font_color_2">#8E8E8E</color>
    <color name="blue_txt">#0f5690</color>

</resources>

for custom_list_item the layout should be

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="?android:attr/activatedBackgroundIndicator" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:textStyle="bold" />

</LinearLayout>

and minimum version of your application should be 11

这篇关于自定义适配器,选中项背景的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆