android 嵌套的listview示例(可参考实现朋友圈评论)
来源:互联网 发布:print is python 编辑:程序博客网 时间:2024/05/22 08:09
最近在项目中用到listview中再嵌套一个listview,两层也有监听,都没有问题。其实,主要解决里面那一层的listview的高度计算就可以,外面那一层listview自动计算。加上里面那层展开的,就是高度。这种解决方案经常应用于朋友圈的评论。每一条说说,然后下面有评论。
项目下载地址:http://download.csdn.net/detail/qq_16064871/9334993
1、项目结构图
2、实现效果图
这上面效果图的监听两层都有,以及外面的button都可以。够多样化吧。
3、ChildListView
package com.nest.view;import android.content.Context;import android.util.AttributeSet;import android.widget.ListView;public class ChildListView extends ListView {public ChildListView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);// TODO Auto-generated constructor stub}public ChildListView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub}public ChildListView(Context context) {super(context);// TODO Auto-generated constructor stub}@Overridepublic void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);super.onMeasure(widthMeasureSpec, expandSpec);}}
里面listview的高度的计算。
4、外面那层listview的适配器ParentAdapt
package com.nest.adapt;import java.util.ArrayList;import java.util.List;import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.Button;import android.widget.ListView;import android.widget.TextView;import android.widget.Toast;import com.nest.activity.R;import com.nest.base.BaseObjectListAdapter;import com.nest.entity.Entity;import com.nest.entity.ShowEntity;/** * 父listview适配器 * @author mmsx * */public class ParentAdapt extends BaseObjectListAdapter{private ArrayList<ShowEntity> mChildList;public static int mParentItem = -1;public static boolean mbShowChild = false;public ParentAdapt(Context context, List<? extends Entity> datas) {super(context, datas);initData();}private void initData() {mChildList = new ArrayList<ShowEntity>();mChildList.clear();for (int i = 0; i < 5; i++) {ShowEntity tempEntity = new ShowEntity("字标题" + String.valueOf(i), "内容");mChildList.add(tempEntity);}}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder vHolder = null;if (convertView == null) {vHolder = new ViewHolder();convertView = mInflater.inflate(R.layout.activity_main_list_item, null);vHolder.textViewTitle = (TextView)convertView.findViewById(R.id.textView_1);vHolder.textViewContent= (TextView)convertView.findViewById(R.id.textView_2);vHolder.listViewItem = (ListView)convertView.findViewById(R.id.listView_child);vHolder.buttonStake = (Button)convertView.findViewById(R.id.button_1);convertView.setTag(vHolder);}else {vHolder = (ViewHolder) convertView.getTag();}ShowEntity tempEntity = (ShowEntity) mDatas.get(position);vHolder.textViewTitle.setText(tempEntity.getTitle());vHolder.textViewContent.setText(tempEntity.getContent());//点击那个弹出那个,如果已经弹出就收回子listviewif (mParentItem == position && mbShowChild) {//子listview实在这里加载数据的ChildAdapt tempAdapt = new ChildAdapt(mContext, mChildList);vHolder.listViewItem.setAdapter(tempAdapt);vHolder.listViewItem.setVisibility(View.VISIBLE);//子listview的点击监听vHolder.listViewItem.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {Toast.makeText(mContext, "Child Listview" + String.valueOf(position), Toast.LENGTH_SHORT).show();}});}else {vHolder.listViewItem.setVisibility(View.GONE);}vHolder.buttonStake.setOnClickListener(new ParentButtonLisener());//记住是那个button事件vHolder.buttonStake.setTag(position); return convertView;}class ViewHolder{TextView textViewTitle;TextView textViewContent;ListView listViewItem;Button buttonStake;}//父listview的button的监听private class ParentButtonLisener implements OnClickListener{@Overridepublic void onClick(View v) {Integer nPosition = (Integer) (v.getTag());Toast.makeText(mContext, "提示" + String.valueOf(nPosition.intValue()), Toast.LENGTH_SHORT).show();}}}
5、里面那层listview的适配器ChildAdapt
package com.nest.adapt;import java.util.List;import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import com.nest.activity.R;import com.nest.base.BaseObjectListAdapter;import com.nest.entity.Entity;import com.nest.entity.ShowEntity;/** * 子listview适配器 * @author mmsx * */public class ChildAdapt extends BaseObjectListAdapter{public ChildAdapt(Context context, List<? extends Entity> datas) {super(context, datas);}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder vHolder = null;if (convertView == null) {vHolder = new ViewHolder();convertView = mInflater.inflate(R.layout.activity_main_list_item_1, null);vHolder.textViewTitle = (TextView)convertView.findViewById(R.id.textView_1);vHolder.textViewContent= (TextView)convertView.findViewById(R.id.textView_2);convertView.setTag(vHolder);}else {vHolder = (ViewHolder) convertView.getTag();}ShowEntity tempEntity = (ShowEntity) mDatas.get(position);vHolder.textViewTitle.setText(tempEntity.getTitle());vHolder.textViewContent.setText(tempEntity.getContent());return convertView;}class ViewHolder{TextView textViewTitle;TextView textViewContent;}}
6、实现调用MainActivity
package com.nest.activity;import java.util.ArrayList;import com.nest.adapt.ParentAdapt;import com.nest.entity.ShowEntity;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ListView;import android.app.Activity;/** * listview嵌套listview实现效果 * @author mmsx * */public class MainActivity extends Activity {private ParentAdapt mParentAdapt;private ArrayList<ShowEntity> mParentList;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initData();initView();}private void initData() {mParentList = new ArrayList<ShowEntity>();mParentList.clear();for (int i = 0; i < 20; i++) {ShowEntity tempEntity = new ShowEntity("标题" + String.valueOf(i), "内容");mParentList.add(tempEntity);}}private void initView() {ListView listView = (ListView)findViewById(R.id.listView1);mParentAdapt = new ParentAdapt(this, mParentList);listView.setAdapter(mParentAdapt);listView.setOnItemClickListener(new AdaptItemClick());//长按listview就不写示范了//listView.setOnItemLongClickListener(listener);}//父listview的单击事件的监听private class AdaptItemClick implements OnItemClickListener{@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position,long id) {if (ParentAdapt.mParentItem == position && ParentAdapt.mbShowChild) {ParentAdapt.mbShowChild = false;}else {ParentAdapt.mbShowChild = true;}ParentAdapt.mParentItem = position;mParentAdapt.notifyDataSetChanged();}}}
布局就不贴,有好几个。有需要下载项目源码。
项目下载地址:http://download.csdn.net/detail/qq_16064871/9334993
2 0
- android 嵌套的listview示例(可参考实现朋友圈评论)
- Android Listview嵌套Listview实现评论
- Android Listview嵌套Listview实现评论
- ListView嵌套ListView实现论坛评论效果
- Listview嵌套Listview实现评论效果
- listview实现微信朋友圈嵌套
- Android ListView嵌套ListView的实现方式
- Android ListView嵌套ListView的实现方式
- android类似微信朋友圈评论效果,listview定位,item总在输入法上面的位置
- Android listview中再嵌套listview 实现消息评论功能处理
- Android ListView实现类似朋友圈的复杂布局
- Android:一个TextView分段改变样式、添加监听事件的实现方式(类似朋友圈评论)
- android之ScrollView里嵌套ListView(都可滚动)
- CommentListTextView 实现朋友圈评论列表
- CommentListTextView 一个TextView实现朋友圈的评论列表
- 微信朋友圈评论功能的实现步骤
- 朋友圈评论回复的两种实现方式
- android 仿微信朋友圈评论,获取当前说说的整体高度
- 【BZOJ3585】mex
- Android Java 动态代理应用
- cocos2dx内存管理
- AsyncTask的简单使用
- 根据经纬度求距离
- android 嵌套的listview示例(可参考实现朋友圈评论)
- 【bzoj3223】Tyvj 1729 文艺平衡树 Splay
- ant安装时
- 一些算法书籍
- pdf加水印,文字和图片,超链接, java itext, 这里有你想要的一切
- ASP.NET弹出消息框、确认框的代码
- jqmobi select 动态赋予选项时问题
- 【codevs1246】丑数,STL与取模大质数的好处
- Launcher3源码分析 — ui结构