• BaseAdapter自定义适配器——思路详解


    BaseAdapter自定义适配器——思路详解

    引言:

    Adapter用来把数据绑定到扩展了AdapterView类的视图组。系统自带了几个原生的Adapter。

    由于原生的Adapter视图功能太少,有时需要有自己的视图格式。并且在开发中经常用到。

    实现效果:

    实现过程:

    1. 重写视图区域:

      即重写BaseAdapter

             有四方要重写:

    public int getCount() 

    数据域大小方法

    public Object getItem(int arg0)

    返回每个Item的数据据

    public long getItemId(int arg0)

    返回每个Item的ID

    View getView(int arg0, View arg1, ViewGroup arg2)

    最重要的是:重绘视图,调用次数是由第一个方法确定的。最后将视图返回。

    注意:有些控件必须设置成没有获利焦点与点击。

    这几个方法写的内容基本不变,具有参考价值。

    2.重写数据区域使用ArrayList实现List。

    先封装一个数据类,再将这个数据类装进List集合中。

    这两个集合是很重要的,开发中是很常用的。但是《疯狂Java讲义》中讲的很少,但讲的很全。

    3.绑定数据区域与视图区域

    setListAdapter(MyAdapter);

    注:MyAdapter是自定义的Adapter。

    代码实现:

     JAVA代码:

    MainActivity.java、MyAdapter.java、User.java、UserManger.java中

     1 package com.example.baseadapteriwrite;
     2 
     3 import java.util.ArrayList;
     4 
     5 import android.os.Bundle;
     6 
     7 import android.app.Activity;
     8 import android.app.ListActivity;
     9 import android.content.Context;
    10 import android.view.Menu;
    11 import android.widget.ListView;
    12 
    13 public class MainActivity extends ListActivity {
    14 
    15     private ArrayList<User> mList=null;
    16     private Context context=null;
    17     private ListView listView=null;
    18     @Override
    19     protected void onCreate(Bundle savedInstanceState) {
    20         super.onCreate(savedInstanceState);
    21         context=this;
    22         listView=this.getListView();
    23         mList=(ArrayList<User>) UserManger.getUserList();
    24         MyAdapter adapter = new MyAdapter(context, mList);
    25         
    26         setListAdapter(adapter);
    27     }
    28     
    29 
    30     @Override
    31     public boolean onCreateOptionsMenu(Menu menu) {
    32         // Inflate the menu; this adds items to the action bar if it is present.
    33         getMenuInflater().inflate(R.menu.main, menu);
    34         return true;
    35     }
    36 
    37 }
    View Code
     1 import java.util.List;
     2 import android.content.Context;
     3 import android.view.LayoutInflater;
     4 import android.view.View;
     5 import android.view.ViewGroup;
     6 import android.widget.BaseAdapter;
     7 import android.widget.TextView;
     8 
     9 public class MyAdapter extends BaseAdapter {
    10     private List<User> list = null;
    11     private Context context = null;
    12 
    13     public MyAdapter(Context context, List<User> list) {
    14         this.list=list;
    15         this.context = context;
    16     }
    17 
    18     @Override
    19     public int getCount() {
    20         // TODO Auto-generated method stub
    21         // 多少 个数据
    22         return list.size();
    23     }
    24 
    25     @Override
    26     public Object getItem(int arg0) {
    27         // TODO Auto-generated method stub
    28         return list.get(arg0);
    29     }
    30 
    31     @Override
    32     public long getItemId(int arg0) {
    33         // TODO Auto-generated method stub
    34         return arg0;
    35     }
    36 
    37     @Override
    38     public View getView(int arg0, View arg1, ViewGroup arg2) {
    39         // TODO Auto-generated method stub
    40         TextView text1=null,text2=null;
    41         if(arg1==null)
    42         {
    43             LayoutInflater inflater = LayoutInflater.from(context);
    44             arg1 = inflater.inflate(R.layout.activity_main,null);
    45         }
    46         text1=(TextView) arg1.findViewById(R.id.textView1);
    47         text2=(TextView) arg1.findViewById(R.id.textView2);
    48         text1.setText(list.get(arg0).getmName());
    49         text2.setText(list.get(arg0).getmAge());
    50         return arg1;
    51     }
    52 }
    View Code
     1 public class User
     2 {
     3     private String mName=null;
     4     private String mAge=null;
     5     
     6     public User(String name,String age)
     7     {
     8         this.mName=name;
     9         this.mAge =age;
    10     }
    11     
    12     public String getmName() {
    13         return mName;
    14     }
    15 
    16     public void setmName(String mName) {
    17         this.mName = mName;
    18     }
    19 
    20     public String getmAge() {
    21         return mAge;
    22     }
    23 
    24     public void setmAge(String mAge) {
    25         this.mAge = mAge;
    26     }
    27 }
    View Code
     1 import java.util.ArrayList;
     2 import java.util.List;
     3 
     4 public class UserManger {
     5 
     6     
     7     public static List<User> getUserList() 
     8     {
     9         List<User> list=new ArrayList<User>();
    10         for(int i = 0;i<20;++i)
    11         {
    12             User user=new User("MM"+i,"12"+i);
    13             list.add(user);
    14         }
    15         return list;
    16     }
    17 
    18 }
    View Code

    XML代码:

    activity_main.xml中

     1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     android:layout_width="fill_parent"
     3     android:layout_height="fill_parent"
     4     android:orientation="horizontal" >
     5     <ImageView
     6       android:id="@+id/imageView1"
     7       android:layout_width="wrap_content"
     8       android:layout_height="wrap_content"
     9       android:src="@drawable/ic_launcher" />
    10     
    11     <TextView
    12         android:id="@+id/textView1"
    13         android:layout_width="wrap_content"
    14         android:layout_height="wrap_content"/>
    15 
    16     <TextView
    17         android:id="@+id/textView2"
    18         android:layout_width="wrap_content"
    19         android:layout_height="wrap_content" />
    20     
    21 </LinearLayout>
    View Code
  • 相关阅读:
    第二十一天作业
    第二十天:继承
    第二十天作业
    第十六天
    第十九天作业
    day53
    day52
    day51
    day50
    day44
  • 原文地址:https://www.cnblogs.com/orangebook/p/3520144.html
Copyright © 2020-2023  润新知