android 嵌套 listview
来源:互联网 发布:js 百分比 编辑:程序博客网 时间:2024/05/21 19:23
android 嵌套 listview
基本效果如下:
listview元素 A:0 B:1 C:2 …
每个listview 元素内对应的子listview元素
A:0 对应子元素集合 A:0:0 A:0:1 A:0:2 A:0:3 A:0:4
B:1 对应子元素集合 B:1:0 B:1:1 B:1:2 B:1:3 B:1:4
C:2 …..
这里需要使用继承 BaseAdapter,重写 listview 加载数据所需的接口,并在函数
public View getView(int postion, View convertView, ViewGroup parent)
内创建 listview加载的每个元素 convertView。 我们只需要创建一个 listview,并把此作为convertView的一个子元素,即可。
- 创建主listview 类
public class MyAdapter extends BaseAdapter{ private ArrayList<String> listdata; private LayoutInflater inflater; private Context context; public MyAdapter(Context c,ArrayList<String> listdata){ this.listdata = listdata; this.inflater = LayoutInflater.from(c); context = c; } @Override public int getCount() { return listdata.size(); } @Override public Object getItem(int arg0) { return listdata.get(arg0); } public long getItemId(int arg0) { return 0; } ///主listview元素,其中存在两个元素,一个 textview,一个子listview public final class MyitemObj{ public TextView text; public ListView lv; } @Override public View getView(int postion, View convertView, ViewGroup parent) { ///缓存主listview中item( textview 和 子listview) MyitemObj myitemObj = null; if(convertView == null){ convertView = this.inflater.inflate(R.layout.myitem, null); myitemObj = new MyitemObj(); myitemObj.text = (TextView) convertView.findViewById(R.id.lvtv); myitemObj.lv = (ListView) convertView.findViewById(R.id.lvitemmain); convertView.setTag(myitemObj); }else { myitemObj = (MyitemObj)convertView.getTag(); /// 设置主listview元素中当前item 的 textview数据 myitemObj.text.setText( listdata.get(postion) +":"+ Integer.valueOf(postion) ); ArrayList<String> itemdatas = new ArrayList<String>(); for(int i=0;i<5;i++){ itemdatas.add( listdata.get(postion) +":"+ Integer.valueOf(postion) + ":"+ Integer.valueOf(i) ); } ///设置 主listview元素中当前item 的 listview(子listview) 数据 myitemObj.lv.setAdapter(new MyAdapterOfItemItem(this.context, itemdatas)); ///重新计算listview高度,否则,主listview中每个item的子listview无法正常显示,来源于网络..... setListViewHeightBasedOnChildren(myitemObj.lv); return convertView; } }
2.创建listview的 item中listview 对应的类
这个类比较正常
public class MyAdapterOfItemItem extends BaseAdapter{ private ArrayList<String> listdata; private LayoutInflater inflater; public MyAdapterOfItemItem(Context context,ArrayList<String> listdata){ this.listdata = listdata; this.inflater = LayoutInflater.from(context); } @Override public int getCount() { return listdata.size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return listdata.get(arg0); } public long getItemId(int arg0) { return 0; } //// 和上同,当前listview 中的两个元素,一个 textview ,一个image public final class MyitemObj{ public TextView text; public ImageView image; } @Override public View getView(int postion, View convertView, ViewGroup parent) { MyitemObj myitemObj; if(convertView == null){ convertView = this.inflater.inflate(R.layout.myitemitem, null); myitemObj = new MyitemObj(); myitemObj.text = (TextView) convertView.findViewById(R.id.itemitemtv); myitemObj.image = (ImageView) convertView.findViewById(R.id.itemitemimage); convertView.setTag(myitemObj); }else { myitemObj = (MyitemObj)convertView.getTag(); } myitemObj.text.setText(listdata.get(postion)); myitemObj.image.setImageResource(R.drawable.ic_launcher); return convertView; } }
3.Active 类
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView lv = (ListView)findViewById(R.id.lvmain); ArrayList<String> listdata = new ArrayList<String>(); listdata.add("A"); listdata.add("B"); listdata.add("C"); lv.setAdapter(new MyAdapter(this, listdata)); } @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; } /// 重新计算listview高度 public static void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return; } int totalHeight = 0; for (int i = 0; i < listAdapter.getCount(); i++) { View listItem = listAdapter.getView(i, null, listView); listItem.measure(0, 0); totalHeight += listItem.getMeasuredHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); listView.setLayoutParams(params); } }
4 UI activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:paddingLeft="10dip" android:id="@+id/main" android:paddingRight="10dip" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <ListView android:id="@+id/lvmain" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/outline" /></LinearLayout>
5 myitem.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/itemlinelayout" android:orientation="vertical" > <TextView android:id="@+id/lvtv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="false" /> <ListView android:id="@+id/lvitemmain" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/outline" /></LinearLayout>
6 myitemitem.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/itemitemlinelayout" android:orientation="horizontal" > <TextView android:id="@+id/itemitemtv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="false" /> <ImageView android:id="@+id/itemitemimage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="false" /></LinearLayout>
0 0
- Android 中ListView 嵌套 ListView
- Android listview 中嵌套 listview
- android ScrollView嵌套ListView
- Android ExpandableListView嵌套ListView
- android ScrollView嵌套ListView
- Android ListView嵌套
- android ScrollView嵌套Listview
- android 嵌套 listview
- android scrollview 嵌套listview
- Android ScrollView嵌套ListView
- Android ExpandableListView嵌套ListView
- Android Scollowview嵌套ListView
- listView 嵌套gridView android
- Android之ScrollView嵌套ListView
- Android之ScrollView嵌套ListView
- android scrollView嵌套listview问题
- Android中ScrollView嵌套ListView
- Android之ScrollView嵌套ListView
- 1月4日记录:浅析度娘新闻源的运作机制
- 运维小知识---后台运行Jboss
- [入门PS教程]用Photoshop(PS)绘制一个“加载中”GIF
- VSS (Visual Source Safe 2005) 用法详解(转载)
- Ubuntu 14.04 安装配置MySQL5.7 PHP7.1 Nginx1.10
- android 嵌套 listview
- 浅析计算机网络(4)-建立连接
- 实时推荐系统的三种方式
- AngularJS 中的Promise --- $q服务详解
- Objective-c:类簇
- 自学java hibernate基本配置
- 第十章(2)-等待异步调用的完成-学习笔记
- 20160104 ocp 053 20-110
- 基于Redis的消息队列php-resque