• 自定义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布局文件见文章开头。

  • 相关阅读:
    CString与char *互转总结
    string 与char* char[]之间的转换
    VC++下使用SQLite数据库
    VC连接数据库方式
    C/C++中判断某一文件或目录是否存在
    漂亮的CSS按钮样式集以及在线生成工具
    PhpStorm 4.0 & 5.0 部署本地Web应用 (转)
    PHP的serialize序列化数据与JSON格式化数据
    c/c++中产生随机数
    [STL系列]开篇简单介绍
  • 原文地址:https://www.cnblogs.com/whycxb/p/4858983.html
Copyright © 2020-2023  润新知