zoukankan      html  css  js  c++  java
  • (转)Android之自定义适配器

    ListView作为一个实际开发中使用率非常高的视图,一般的系统自带的适配器都无法满足开发中的需求,这时候就需要开发人员来自定义适配器使得ListView能够有一个不错的显示效果。

    有这样一个Demo ,实现图片文字混合列表。

    package com.example.work;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    
    
    import android.R.integer;
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.Toast;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ListView;
    
    public class MainActivity extends Activity {
        private ListView listview;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            listview = (ListView) findViewById(R.id.id_list);
            //这里设置三个列表项,每个列表项对应一个图片和对应的文字
            //图片数组
            int image[] = new int[]{R.drawable.tou1,R.drawable.tou3,R.drawable.he};
            //文字数组
            String text[] = {"连连看","斗地主","爱消除"};
            List<HashMap<String,Object>> list = new ArrayList<HashMap<String,Object>>();
            //将一个图片和一个文字放入一个map集合中,并将map集合依次加入到list集合中
            for(int i=0;i<image.length;i++)
            {
                HashMap<String, Object> map = new HashMap<String, Object>();
                map.put("text", text[i]);
                map.put("image", image[i]);
                list.add(map);
            }
            
            //MyAdapter是自定义的适配器
            MyAdapter myadapter = new MyAdapter(this, R.layout.layout_item, list);
            listview.setAdapter(myadapter);
            
            //点击列表项的响应事件
            listview.setOnItemClickListener(new OnItemClickListener() {
    
                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                        long arg3) {
                    // TODO Auto-generated method stub
                    Toast.makeText(MainActivity.this, "点击了第"+(arg2+1)+"项,内容:"+arg0.getItemAtPosition(arg2).toString(), 1).show();
                }
            });
        }
    
    
    
    }
    
    MainActivity

    自定义适配器:

    package com.example.work;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    public class MyAdapter extends BaseAdapter{
        
        private Context context;//上下文
        private int resourceId;//列表项的布局文件
        private List<HashMap<String, Object>> list; //数据源
        public MyAdapter(Context context,int resourceId,List<HashMap<String,Object>> list)
        {
            this.context = context;
            this.resourceId = resourceId;
            this.list = list;
        }
        //得到列表项的个数,即数据源的数据条数
        @Override
        public int getCount() {
            int count = 0;
            if(list!=null)
            return list.size();
            return count;
        }
    
        //得到对应position位置列表项的内容,即数据源list对应位置的数据
        @Override
        public Object getItem(int position) {
            
            return list.get(position);
        }
        
        //得到列表项的id
        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            //提高对对象的复用
            View view = null;
            if(convertView!=null)
            {
                view = convertView;
            }
            else 
            {
                view = LayoutInflater.from(context).inflate(resourceId, parent,false);
            }
            
            ViewHolder holder = (ViewHolder) view.getTag();
            if(holder==null)
            {
                holder = new ViewHolder();
                holder.textView = (TextView) view.findViewById(R.id.id_textview);
                holder.image = (ImageView) view.findViewById(R.id.id_image);
                view.setTag(holder);
            }
            //给相应位置的图片和文字赋内容
            holder.textView.setText(list.get(position).get("text").toString());
            holder.image.setImageResource((Integer) list.get(position).get("image"));
            
            //返回视图,这里的视图是一整个列表项的视图
            return view;
            
            
        }
        
        class ViewHolder
        {
            TextView textView;
            ImageView image;
        }
        
    
    }

    主Activity布局文件:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
      
        tools:context=".MainActivity" >
    
       <ListView 
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:id="@+id/id_list"
           ></ListView>
    </LinearLayout>

    列表项布局:

    <?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="horizontal" >
        
        
        <ImageView android:layout_width="50dp"
            android:layout_height="50dp"
            android:id="@+id/id_image"
            />
        <TextView 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/id_textview"
            android:gravity="center_vertical"
            android:textStyle="bold|italic"
            />
    </LinearLayout>

    效果图:

    本文转自:安卓开发_浅谈ListView(自定义适配器)

    不努力,还要青春干什么?
  • 相关阅读:
    CF 118E Bertown roads 桥
    hdu 3917 Road constructions 最大权闭合子图
    hdu 4714 Tree2cycle 树形经典问题
    POJ 2516 Minimum Cost 最小费用流
    POJ 3921 Destroying the bus stations 沿着最短路迭代加深搜索
    POJ 3422 Kaka's Matrix Travels K取方格数
    BZOJ 3083: 遥远的国度 dfs序,树链剖分,倍增
    hdu 4010 Query on The Trees LCT
    poj 2455 Secret Milking Machine 二分+最大流 sap
    定制标记---简单标记处理器
  • 原文地址:https://www.cnblogs.com/caidupingblogs/p/5902357.html
Copyright © 2011-2022 走看看