分类:
android(8)
版权声明:本文为博主原创文章,未经博主允许不得转载。
项目下载:https://github.com/Victoria0316/NestListview/tree/master
在项目中用到listview中再嵌套一个listview,两层也有监听,都没有问题。其实,主要解决里面那一层的listview的高度计算就可以,外面那一层listview自动计算。
实现效果图
这上面效果图的监听两层都有,以及外面的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<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);
- }
- }
- @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<ShowEntity> mParentList;
- @Override
- protected 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{
- @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();
- }
- }
- }
-
顶
- 0
-
踩
- 0
暂无评论