先上效果图
由上面的效果图可以看出:页面中的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