BaseAdapter自定义适配器——思路详解
引言:
Adapter用来把数据绑定到扩展了AdapterView类的视图组。系统自带了几个原生的Adapter。
由于原生的Adapter视图功能太少,有时需要有自己的视图格式。并且在开发中经常用到。
实现效果:
实现过程:
-
重写视图区域:
即重写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>