<h1>重写listview适配器
criadapter.java:
public class criadapter extends BaseAdapter {
private List<HashMap<String, Object>> mData;
public criadapter( List<HashMap<String, Object>> data) { //用于加载listview中的数据
mData = data;
}
//以下直到getview都为必须有的方法
public int getCount() {
return mData.size();
}
public Object getItem(int position) {
return mData.get(position);
}
public long getItemId(int position) {
return position;
}
//新建一个类用于获取item中的控件
public class ViewHolder {
public Button button;
}
//适配器中定义视图方法
public View getView(int position, View convertView, ViewGroup parent) { // 在这里定义每个item显示的内容
Map thismessage = mData.get(position);//获取该item所要显示数据
ViewHolder viewHolder;
//不是第一个item的话就重写item
if (convertView == null) {
viewHolder = new ViewHolder();
//获取item.xml文件
convertView = LayoutInflater.from(context).inflate(R.layout.activity_dynamic_item, null);
//获取item中的控件
viewHolder.button = (Button) convertView.findViewById(R.id.dynamic_item_button1);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
//在这下面设置控件属性
viewHolder.button.setText(thismessage.get("content").toString());
viewHolder.button.setOnClickListener(new OnClickListener() { // 按钮点击事件
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
System.out.print(thismessage.get("content").toString());
}
});
return convertView;
}
}
MainActivity:
public class DynamicMainActivity extends Activity implements OnItemClickListener, OnScrollListener {
private ListView list;
private criadapter simp_adapter;
private List<HashMap<String, Object>> Data= new ArrayList<HashMap<String, Object>>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getData();
simp_adapter = new criadapter(Data);
list = (ListView) findViewById(R.id.dynamic_listView1);
list.setAdapter(simp_adapter);
list.setOnItemClickListener(this);
list.setOnScrollListener(this);
}
public void getData() {
for(int i=0;i<5;i++){
HashMap<String, Object> hashMap = new HashMap<String, Object>();
hashMap.put("content", "这是第"+i+"个item");
Data.add(hashMap);
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// // TODO Auto-generated method st
}
}
activity_main.xml:
<RelativeLayout 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="${relativePackage}.${activityClass}" >
<ListView
android:id="@+id/dynamic_listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layoutAnimation="@anim/anim_layout" >
</ListView>
</RelativeLayout>
item.xml:
<RelativeLayout 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="${relativePackage}.${activityClass}"
android:descendantFocusability="afterDescendants"
android:focusable="false"
android:focusableInTouchMode="true">
<Button
android:id="@+id/dynamic_item_button1"
android:layout_width="45dp"
android:layout_height="35dp"
android:background="#28004d"
android:focusable="true"/>
</RelativeLayout>
这样重写适配器就好了
注意,要item中的控件可以点击的话,控件父布局要添加
android:descendantFocusability="afterDescendants"
控件要添加
android:focusable="true"
这样才能获取焦点
另外要想动态设置item的布局,可以用手写的方式在适配器的getview()中添加控件,参考另一篇博客
criadapter.java:
public class criadapter extends BaseAdapter {
private List<HashMap<String, Object>> mData;
public criadapter( List<HashMap<String, Object>> data) { //用于加载listview中的数据
mData = data;
}
//以下直到getview都为必须有的方法
public int getCount() {
return mData.size();
}
public Object getItem(int position) {
return mData.get(position);
}
public long getItemId(int position) {
return position;
}
//新建一个类用于获取item中的控件
public class ViewHolder {
public Button button;
}
//适配器中定义视图方法
public View getView(int position, View convertView, ViewGroup parent) { // 在这里定义每个item显示的内容
Map thismessage = mData.get(position);//获取该item所要显示数据
ViewHolder viewHolder;
//不是第一个item的话就重写item
if (convertView == null) {
viewHolder = new ViewHolder();
//获取item.xml文件
convertView = LayoutInflater.from(context).inflate(R.layout.activity_dynamic_item, null);
//获取item中的控件
viewHolder.button = (Button) convertView.findViewById(R.id.dynamic_item_button1);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
//在这下面设置控件属性
viewHolder.button.setText(thismessage.get("content").toString());
viewHolder.button.setOnClickListener(new OnClickListener() { // 按钮点击事件
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
System.out.print(thismessage.get("content").toString());
}
});
return convertView;
}
}
MainActivity:
public class DynamicMainActivity extends Activity implements OnItemClickListener, OnScrollListener {
private ListView list;
private criadapter simp_adapter;
private List<HashMap<String, Object>> Data= new ArrayList<HashMap<String, Object>>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getData();
simp_adapter = new criadapter(Data);
list = (ListView) findViewById(R.id.dynamic_listView1);
list.setAdapter(simp_adapter);
list.setOnItemClickListener(this);
list.setOnScrollListener(this);
}
public void getData() {
for(int i=0;i<5;i++){
HashMap<String, Object> hashMap = new HashMap<String, Object>();
hashMap.put("content", "这是第"+i+"个item");
Data.add(hashMap);
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// // TODO Auto-generated method st
}
}
activity_main.xml:
<RelativeLayout 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="${relativePackage}.${activityClass}" >
<ListView
android:id="@+id/dynamic_listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layoutAnimation="@anim/anim_layout" >
</ListView>
</RelativeLayout>
item.xml:
<RelativeLayout 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="${relativePackage}.${activityClass}"
android:descendantFocusability="afterDescendants"
android:focusable="false"
android:focusableInTouchMode="true">
<Button
android:id="@+id/dynamic_item_button1"
android:layout_width="45dp"
android:layout_height="35dp"
android:background="#28004d"
android:focusable="true"/>
</RelativeLayout>
这样重写适配器就好了
注意,要item中的控件可以点击的话,控件父布局要添加
android:descendantFocusability="afterDescendants"
控件要添加
android:focusable="true"
这样才能获取焦点
另外要想动态设置item的布局,可以用手写的方式在适配器的getview()中添加控件,参考另一篇博客