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

时间:2023-03-09 20:26:48
BaseAdapter自定义适配器——思路详解

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

引言:

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

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

实现效果:

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

实现过程:

  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中

 package com.example.baseadapteriwrite;

 import java.util.ArrayList;

 import android.os.Bundle;

 import android.app.Activity;
import android.app.ListActivity;
import android.content.Context;
import android.view.Menu;
import android.widget.ListView; public class MainActivity extends ListActivity { private ArrayList<User> mList=null;
private Context context=null;
private ListView listView=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context=this;
listView=this.getListView();
mList=(ArrayList<User>) UserManger.getUserList();
MyAdapter adapter = new MyAdapter(context, mList); setListAdapter(adapter);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }
 import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView; public class MyAdapter extends BaseAdapter {
private List<User> list = null;
private Context context = null; public MyAdapter(Context context, List<User> list) {
this.list=list;
this.context = context;
} @Override
public int getCount() {
// TODO Auto-generated method stub
// 多少 个数据
return list.size();
} @Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return list.get(arg0);
} @Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
} @Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
TextView text1=null,text2=null;
if(arg1==null)
{
LayoutInflater inflater = LayoutInflater.from(context);
arg1 = inflater.inflate(R.layout.activity_main,null);
}
text1=(TextView) arg1.findViewById(R.id.textView1);
text2=(TextView) arg1.findViewById(R.id.textView2);
text1.setText(list.get(arg0).getmName());
text2.setText(list.get(arg0).getmAge());
return arg1;
}
}
 public class User
{
private String mName=null;
private String mAge=null; public User(String name,String age)
{
this.mName=name;
this.mAge =age;
} public String getmName() {
return mName;
} public void setmName(String mName) {
this.mName = mName;
} public String getmAge() {
return mAge;
} public void setmAge(String mAge) {
this.mAge = mAge;
}
}
 import java.util.ArrayList;
import java.util.List; public class UserManger { public static List<User> getUserList()
{
List<User> list=new ArrayList<User>();
for(int i = ;i<;++i)
{
User user=new User("MM"+i,""+i);
list.add(user);
}
return list;
} }

XML代码:

activity_main.xml中

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" /> <TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/> <TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /> </LinearLayout>