关于listview嵌套listview
项目中想要实现一个效果,就是我们显示用户不同景点下(个数事先不确定),不同的用户动态信息(带有图片,文字,个数事先不确定),所以,试图用listview中嵌套listview来实现,虽然效果不太美观,但还是尝试了一下,下面把基本思路和嵌套的运用记录一下。
1.文件说明:
MainActivity.java
activity_main.xml
item.xml
Item.java
subItem.xml
SubItem.java
(activity_main布局中运用到listview,引用item.xml布局定义,在item.xml中又运用到listview,引用subItem.xml布局定义,Item.java和SubItem.java是对应xml布局的类定义)
2.关键代码说明:
activity_main.xml中:
<LinearLayout>
<TextView>android:text="主界面布局"</TextView>
<ListView>android:id="@+id/list_view"</ListView>
</LinearLayout>
item.xml中:
<LinearLayout>
<TextView>android:text="一级listView布局"</TextView>
<ListView>android:id="@+id/sub_list_view"</ListView>
</LinearLayout>
Item.java中:
public class Item
{
private String text;
private private List<SubItem> subList;
public Item(String text, List<SubItem>subList)
{
this.text = text;
this.subList = subList;
}
public String getText()
{
return text;
}
public List<SubItem> getSubItemList()
{
return subList;
}
}
subItem.xml中:
<LinearLayout>
<TextView>android:text="二级listVIew布局"</TextView>
<ImageView></ImageView>
</LinearLayout>
SubItem.java中类似Item.java。
MainActivity中:
public class MainActivity implements OnCheckedChangeListener
{
private List<Item> itemList = new ArrayList<Item>();
protected void onCreate(Bundle savedInstanceState)
{
addItemListEle();
ItemAdapter itemAdapter = new ItemAdapter(MainActivity.this, R.layout.item, itemList);
ListView listview = (ListView)findViewById(R.id.list_view);
listview.setAdapter(itemAdapter);
}
public void addItemListEle()
{
for(int j =0 ; j < 3; j++)
{
List<SubItem> subItemList = new ArrayList<SubItem>();
for(int i =0 ; i < 3; i++)
{
subItemList.add(new SubItem("这是item"+j+"的第"+i+"个subItem",R.drawable...));
}
itemList.add(subItemList);
}
}
private class ItemAdapter extends ArrayAdapter<Item>
{
private int resourceId;
public ItemAdapter(Context context, int resource, List<Item> objects) {
super(context, resource, objects);
resourceId = resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Item item = getItem(position);// 获取当前项的Item实例
List<SubItem> subItemList = new ArrayList<SubItem>();
View view = LayoutInflater.from(getContext()).inflate(resourceId, null);
TextView itemText = (itemText)view.findViewById(R.id.itemtext);
ListView itemList = (ListView)view.findViewById(R.id.list_view);
//获得填充数据
itemText.setText(item.getText());
SubItemAdapter subItemAdapter = new SubItemAdapter(view.getContext, R.layout.subItem,subItemList);
itemList.setAdapter(subItemAdapter);
return view;
}
}
private class SubItemAdapter extends ArrayAdapter<SubItem>{
private int resourceId;
public SubItemAdapter(Context context, int resource,List<SubItem> objects) {
super(context, resource, objects);
resourceId = resource;
}
@Override
public View getView(int position, View arg1, ViewGroup arg2) {
SubItem subItem = getItem(position); //获得当前的SubItem实例
View view getLayoutInflater().inflate(ResouceId, null);
TextView subText = (TextView)findViewById(R.id.sub_text);
ImageView subImage = (ImageView)view1.findViewById(R.id.sub_image);
subImage.setImageResource(subItem.getImageId());
subText.setText(subItem.getText());
return view;
}
}
}
整个过程就是对外层list设置监听,外层list里的又对list进行监听,相互嵌套的过程就实现了。
posted on 2016-04-05 16:35 Day_to_Day 阅读(452) 评论(0) 编辑 收藏 举报