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>
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; } }
4、Listitem布局文件见文章开头。