android评论嵌套,android 嵌套的listview示例(可参照实现朋友圈评论)

android 嵌套的listview示例(可参考实现朋友圈评论) 最近在项目中用到listview中再嵌套一个listview,两层也有监听,都没有问题。其实,主要解决里面那一层的listview的高度计算就可以,外面那一层listview自动计算。加上里面那层展开的,就是高度。这种解

android 嵌套的listview示例(可参考实现朋友圈评论)

最近在项目中用到listview中再嵌套一个listview,两层也有监听,都没有问题。其实,主要解决里面那一层的listview的高度计算就可以,外面那一层listview自动计算。加上里面那层展开的,就是高度。这种解决方案经常应用于朋友圈的评论。每一条说说,然后下面有评论。

项目下载地址:http://download.csdn.net/detail/qq_16064871/9334993

1、项目结构图

7aae930d8b9f32b09bf5cf728a2d6338.png

2、实现效果图

6b9da34203da62ff4ee4bb8ffb6b6221.gif

这上面效果图的监听两层都有,以及外面的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

}

@Override

public 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 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();

mChildList.clear();

for (int i = 0; i < 5; i++) {

ShowEntity tempEntity = new ShowEntity("字标题" + String.valueOf(i), "内容");

mChildList.add(tempEntity);

}

}

@Override

public 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());

//点击那个弹出那个,如果已经弹出就收回子listview

if (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() {

@Override

public 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{

@Override

public 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);

}

@Override

public 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 mParentList;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initData();

initView();

}

private void initData() {

mParentList = new ArrayList();

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{

@Override

public 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/93349931楼douyingnan5小时前有个东西叫做expandablelistview

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值