自定义ListView适配器Adapter引用布局文件的情况下实现点击列表项时背景颜色为灰色

listview控件设置适配器的时候,如果使用自定义的adapter,比如MyArrayAdapter extends ArrayAdapter<String>

如果listitem布局文件不做任何处理的话,点击列表项的时候不会出现背景色灰色的现象。

实现思路是:在listitem布局文件中为该布局文件中的父控件:LinearLayout,设置android:background="@drawable/listitemclickseletor"

其中listitemclickseletor是res/drawable目录下的一个根节点为selector的xml文件。

listitem布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@drawable/listitemclickseletor"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
    
    <TextView
        android:id="@+id/listitemText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
         android:text="@string/app_name"
         android:textSize="18sp"
        android:textColor="#000000"
        android:gravity="center_vertical"
        android:padding="15dp"
    />

</LinearLayout>
simple_list_item_1_custom

listitemclickseletor文件

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="true" android:drawable="@color/item_pressed"/>
    <item android:drawable="@color/item_default"></item>
</selector>

colors文件
res/values/colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    
    <color name="item_default">#ffffffff</color>
    <color name="item_pressed">#bbbbbb</color>
    
</resources>


效果图如下:

较为完整的使用过程:

1、Activity界面布局文件中的listview

<!-- 历史记录列表 -->
            <!-- android:layout_width="match_parent"使用这个则代表列表项占据屏幕宽度 -->
            <!-- android:layout_width="wrap_content"使用这个则代表列表项占据实际宽度 -->
            <ListView
                android:id="@+id/history_list"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >
            </ListView>

2、Activity界面布局文件中的代码

private ListView history_list;//历史记录列表
//列表相关
private String[] history_arr;//历史记录数组
private MyArrayAdapter myarrayAdapter;//自定义的历史记录列表的数组适配器


//历史记录列表
history_list = (ListView) findViewById(R.id.history_list);

//使用自定义的适配器
List<String> historyList = new ArrayList<String>();
for(String historyStr : history_arr){
    historyList.add(historyStr);
}
                
myarrayAdapter = new MyArrayAdapter(this, R.layout.simple_list_item_1_custom, historyList);

history_list.setAdapter(myarrayAdapter);// 设置自定义的适配器

3、MyArrayAdapter类

package com.why.autosearch.adapter;

import java.util.List;

import com.why.autosearch.activity.R;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MyArrayAdapter extends ArrayAdapter<String>{

    private int listitemResourceid;//列表项的布局文件ID
    private Context mcontext;
    
    public MyArrayAdapter(Context context, int resource, List<String> objects) {
        super(context, resource, objects);
        listitemResourceid = resource;
        mcontext = context;
    }
    
    /**
     * 重写getView*/
    public View getView(int position, View convertView, ViewGroup parent) {
        
        String listItemStr = getItem(position);
        
        View view = null;
        ViewHolder holder = null;
        
        if(convertView == null){
            view = LayoutInflater.from(mcontext).inflate(listitemResourceid, parent, false);
            holder = new ViewHolder();
            holder.listitemText = (TextView) view.findViewById(R.id.listitemText);
            view.setTag(holder);
        }else{
            view = convertView;
            holder = (ViewHolder) view.getTag();
        }
        
        //列表项的标题
        holder.listitemText.setText(listItemStr);
        
        return view;
    }
    
    class ViewHolder{
        TextView listitemText;
    }
    
    

}
MyArrayAdapter

4、Listitem布局文件见文章开头。

原文地址:https://www.cnblogs.com/whycxb/p/4858983.html