Android中自定义ListView
2011-03-12 09:43
246 查看
1. 自定义ListView,效果图:
2. 代码实现:
(1)res/layout/main.xml实现:
(2)ListView的Item布局实现:
(3)主Activity实现:
(4)ListView所用Adapter实现:
(5)自定义ListView实现:
2. 代码实现:
(1)res/layout/main.xml实现:
]<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <com.focus.fishme.SelfListView android:id="@+id/ListView" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout>
(2)ListView的Item布局实现:
]<?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" android:orientation = "vertical" android:layout_width = "fill_parent" android:layout_height = "fill_parent" > <TextView android:id = "@+id/TextViewOne" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:layout_marginLeft = "10dip" android:textSize = "24sp" /> <TextView android:id = "@+id/TextViewTwo" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:layout_marginLeft = "10dip" /> <View android:layout_height = "1dip" android:layout_width = "fill_parent" android:background = "#FF0000" /> </LinearLayout>
(3)主Activity实现:
]package com.focus.fishme; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.os.Bundle; public class SelfListViewActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /** * 设置主布局。 */ setContentView(R.layout.main); /** * ListView数据集。 */ List<Map<String , Object>> mSelfData = new ArrayList<Map<String,Object>>(); /** * 获取ListView组件。 */ SelfListView mSelfListView = (SelfListView) findViewById(R.id.ListView); /** * 生成数据。 */ for (int i = 0; i < 10; i++) { HashMap<String, Object> mMap = new HashMap<String, Object>(); mMap.put("key_name", "name" + i); mMap.put("value_name", "value" + i); mSelfData.add(mMap); } /** * 自定义Adapter。 */ final SelfAdapter mSelfAdapter = new SelfAdapter(this, mSelfData, R.layout.item, new String[] { "key_name", "value_name" }, new int[] { R.id.TextViewOne, R.id.TextViewTwo }); /** * 向ListView设置Adapter。 */ mSelfListView.setSelfAdapter(mSelfAdapter); } }
(4)ListView所用Adapter实现:
]package com.focus.fishme; 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.TextView; public class SelfAdapter extends BaseAdapter { private LayoutInflater mLayoutInflater; private int mResource; private List<? extends Map<String, ?>> mSelfData; private String[] from; private int[] to; public SelfAdapter(Context context, List<? extends Map<String, ?>> data, int resouce, String[] from, int[] to) { this.mSelfData = data; this.mResource = resouce; this.mSelfData = data; this.from = from; this.to = to; this.mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public int getCount() { return mSelfData.size(); } public Object getItem(int position) { return mSelfData.get(position); } public String get(int position, Object key) { Map<String, ?> map = (Map<String, ?>) getItem(position); return map.get(key).toString(); } public long getItemId(int position) { return position; } /** * 生成ListView的Item布局。 */ public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mLayoutInflater.inflate(mResource, null); } Map<String, ?> item = mSelfData.get(position); int count = to.length; for (int i = 0; i < count; i++) { View v = convertView.findViewById(to[i]); bindView(v, item, from[i]); } convertView.setTag(position); return convertView; } private void bindView(View view, Map<String, ?> item, String from) { Object data = item.get(from); if (view instanceof TextView) { ((TextView) view).setText(data == null ? "" : data.toString()); } } }
(5)自定义ListView实现:
]package com.focus.fishme; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.widget.BaseAdapter; import android.widget.LinearLayout; public class SelfListView extends LinearLayout { private BaseAdapter mSelfAdapter; public SelfListView(Context context) { super(context); } public SelfListView(Context context, AttributeSet attributeSet) { super(context, attributeSet); } /** * 删除ListView中上一次渲染的View,并添加新View。 */ private void buildList() { if (mSelfAdapter == null) { } if (getChildCount() > 0) { removeAllViews(); } int count = mSelfAdapter.getCount(); for(int i = 0 ; i < count ; i++) { View view = mSelfAdapter.getView(i, null, null); if (view != null) { addView(view, i); } } } public BaseAdapter getSelfAdapter() { return mSelfAdapter; } /** * 设置Adapter。 * * @param selfAdapter */ public void setSelfAdapter(BaseAdapter selfAdapter) { this.mSelfAdapter = selfAdapter; buildList(); } }
相关文章推荐
- Android自定义LinearLayout实现左右侧滑菜单,完美兼容ListView、ScrollView、ViewPager等滑动控件
- Android之自定义Adapter的ListView
- Android自定义ListView实现仿微信侧滑删除
- android自定义BaseAdapter,实现从网络加载包含图片的listview
- 在android 自定义listView中绘制矩形
- Android 自定义ListView只显示第一条数据的问题
- android自定义ListView详解
- android自定义下拉刷新上拉更新的ListView
- Android自定义ListView和GridView解决滑动冲突和显示不全
- Android低阶【chapter-5】ListView和自定义适配器(Adapter)
- Android 自定义Adapter的ListView
- Android游戏开发23:自定义ListView通用适配器(BaseAdapter)之全方位详解
- android 自定义listview——实现上拉刷新下拉加载的功能
- Android成长之路(8)——ListView优化和自定义Adapter的应用
- 自定义ListView FastScroller滑块图片 以及 android:fastScrollEnabled="true" 不起作用
- Android---自定义带CheckBox的ListView实现
- android总结整理----(2)自定义ListView(SimpleAdapter实现)
- Android 自定义ListView中的Item样式
- Android开发-DrawerLayout实现侧滑菜单(1)-自定义ListView的实现&沉浸式状态栏
- Android PullToRrefresh 自定义下拉刷新动画 (listview、scrollview等)