android ListView 自定义 BaseAdapter

先上效果图

由上面的效果图可以看出:页面中的LISTVIEW的每一项,都是由两个TEXTVIEW组成,初始化的时候,只显示第一个TEXTVIEW,在这里我们成为标题,而内容部分的setVisible属性为"GONE"。为Ite添加onClick监听器,在每次点击的时候,显示内容部分,这里需要调用BaseAdapter的notifyDataSetChanged()进行刷新显示。

代码部分:

 1 class MyLayout extends LinearLayout {
 2
 3     private TextView mTitle;
 4     private TextView mWords;
 5
 6     public MyLayout(Context context, String title, String words,
 7             boolean mVisible) {
 8         super(context);
 9         this.setOrientation(VERTICAL);
10
11         mTitle = new TextView(context);
12         mTitle.setText(title);
13         addView(mTitle, new LinearLayout.LayoutParams(
14                 LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
15
16         mWords = new TextView(context);
17         mWords.setText(words);
18         addView(mWords, new LinearLayout.LayoutParams(
19                 LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
20         mWords.setVisibility(mVisible ? View.VISIBLE : View.GONE);
21     }
22
23     public void setTitle(String title) {
24         mTitle.setText(title);
25     }
26
27     public void setWords(String words) {
28         mWords.setText(words);
29     }
30
31     public void setWordsVisible(boolean mVisible) {
32         mWords.setVisibility(mVisible ? View.VISIBLE : View.GONE);
33     }
34
35 }

MyLayout

* 继承 LinearLayout 在其中添加两个TextView,通过 mVisible ? View.VISIBLE : View.GONE 控制内容是否显示。Tips:这里并没有使用invisible属性。

 1 class MyBaseAdapter extends BaseAdapter {
 2     private String[] titles = { "标题一", "标题二", "标题三", "标题四", "标题五" };
 3     private String[] words = { "我是内容1,我是内容1", "我是内容2,我是内容2", "我是内容3,我是内容3",
 4             "我是内容4,我是内容4", "我是内容5,我是内容5" };
 5     private boolean[] flags = { false, false, false, false, false };
 6     private Context mContext;
 7
 8     public MyBaseAdapter(Context context) {
 9         mContext = context;
10     }
11
12     @Override
13     public int getCount() {
14         // TODO Auto-generated method stub
15         return titles.length;
16     }
17
18     @Override
19     public Object getItem(int position) {
20         // TODO Auto-generated method stub
21         return position;
22     }
23
24     @Override
25     public long getItemId(int position) {
26         // TODO Auto-generated method stub
27         return position;
28     }
29
30     @Override
31     public View getView(int position, View convertView, ViewGroup parent) {
32         // TODO Auto-generated method stub
33         MyLayout mLayout;
34         if (convertView == null) {
35             mLayout = new MyLayout(mContext, titles[position], words[position],
36                     flags[position]);
37         }else{
38             mLayout = (MyLayout) convertView;
39             mLayout.setTitle(titles[position]);
40             mLayout.setWords(words[position]);
41             mLayout.setWordsVisible(flags[position]);
42         }
43         return mLayout;
44     }
45
46     public void toggler(int position){
47         flags[position] = !flags[position];
48         notifyDataSetChanged();
49     }
50
51
52
53 }

MyBaseAdapter

* 重写getView()方法,完成初始化

 1 public class BaseAdapterActivity extends ListActivity {
 2
 3     @Override
 4     protected void onCreate(Bundle savedInstanceState) {
 5         // TODO Auto-generated method stub
 6         super.onCreate(savedInstanceState);
 7         this.setListAdapter(new MyBaseAdapter(this));
 8     }
 9
10     @Override
11     protected void onListItemClick(ListView l, View v, int position, long id) {
12         ((MyBaseAdapter)getListAdapter()).toggler(position);
13     }
14
15 }

MainActivity

时间: 2024-10-14 10:28:54

android ListView 自定义 BaseAdapter的相关文章

ListView 自定义BaseAdapter实现单选打勾(无漏洞)

最近因为一个项目的原因需要自定义一个BaseAdapter实现ListVIew单选打勾的功能,虽然听起来很简单,我在网上也 看过一些例子,似乎是实现了,但往往存在一些漏洞.往往漏洞如下 1.网上例子item较少,item增多时漏洞出现,忽略了BaseAdapter中getView()方法中convertView重用的问题 2.忽略了BaseAdapter中getView()方法并不是一下子加载完所有item,上下拖动listview时item会重新加载,getview会重新被调用,所以上下拖动的

Android ListView使用BaseAdapter与ListView的优化 (转至 http://www.open-open.com/lib/view/open1339485728006.html)

在ListView的使用中,有时候还需要在里面加入按钮等控件,实现单独的操作.也就是说,这个ListView不再只是展示数据,也不仅仅是这一行要来处理用户的操作,而是里面的控件要获得用户的焦点.读者可以试试用SimpleAdapter添加一个按钮到ListView的条目中,会发现可以添加,但是却无法获得焦点,点击操作被ListView的Item所覆盖.这时候最方便的方法就是使用灵活的适配器BaseAdapter了. ▲图4-35 BaseAdapter中的方法 使用BaseAdapter必须写一

Android ListView使用BaseAdapter与ListView的优化

在ListView的使用中,有时候还需要在里面加入按钮等控件,实现单独的操作.也就是说,这个ListView不再只是展示数据,也不仅仅是这一行要来处理用户的操作,而是里面的控件要获得用户的焦点.读者可以试试用SimpleAdapter添加一个按钮到ListView的条目中,会发现可以添加,但是却无法获得焦点,点击操作被ListView的Item所覆盖.这时候最方便的方法就是使用灵活的适配器BaseAdapter了. ▲图4-35 BaseAdapter中的方法 使用BaseAdapter必须写一

android开发最常用例子整理----(3)自定义ListView(自定义BaseAdapter实现)

在上一个教程中,我们使用SimpleAdapter实现自定义ListView,但是有一点不方便的是,如果要对每一个ListView的item选项进行不同的样式设置,就很麻烦,因为SimpleAdapter使用的是统一的风格样式.如果要实现不同item使用不同的风格样式,那么就要通过集成BaseAdapter来实现. 一.Activity MainActivity.java源码: public class MainActivity extends Activity { @Override prot

Android ListView之BaseAdapter

话说开发用了各种Adapter之后感觉用的最舒服的还是BaseAdapter,尽管使用起来比其他适配器有些麻烦,但是使用它却能实现很多自己喜欢的列表布局,比如ListView.GridView.Gallery.Spinner等等.它是直接继承自接口类Adapter的,使用BaseAdapter时需要重写很多方法,其中最重要的当属getView,因为这会涉及到ListView优化等问题. BaseAdapter与其他Adapter有些不一样,其他的Adapter可以直接在其构造方法中进行数据的设置

Android ListView 自定义 Adapter

自定义Adapter类 public class ListViewAdapter extends BaseAdapter { private static final String TAG = MainActivity.class.getName(); private Context context; // 运行上下文 private List<Map<String, Object>> listItems; // 商品信息集合 private LayoutInflater list

android ListView 和 BaseAdapter 应用

步聚: 1.建立ListView对象:--(作用:绑定Adapter呈现数据) 2.建立ListView实现的Item栏位.xml布局:--(作用:实现ListView的栏位布局) 3.建立Item.xml 的View数据实例(类):--(作用:实现Item栏位数据接口) 4.继承BaseAdapter建立MyAdapter类class:--(作用:封装ListView的.xml布局与Item数据) 5.当然还要作更多的操作,这里例出简洁的方法: adapter实现: 1 private cla

android ListView之BaseAdapter的使用方式

通常在使用自己定义适配器的时候,我们都会掌握一种固定的模式.充分利用convertView+缓存的方式. private ArrayList<ListBean> list ; private LayoutInflater mInflater; public DetailListAdapter(Context context,ArrayList<ListBean> list){ this.list=list; mInflater = LayoutInflater.from(conte

Android学习笔记-构建一个可复用的自定义BaseAdapter

转载自http://www.runoob.com/w3cnote/android-tutorial-customer-baseadapter.html   作者:coder-pig 本节引言: 如题,本节给大家带来的是构建一个可复用的自定义BaseAdapter,我们每每涉及到ListView GridView等其他的Adapter控件,都需要自己另外写一个BaseAdapter类,这样显得非常麻烦, 又比如,我们想在一个界面显示两个ListView的话,我们也是需要些两个BaseAdapter