论坛首页 移动开发技术论坛

ListView 展开/隐藏

浏览 10629 次
精华帖 (0) :: 良好帖 (5) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-01-30   最后修改:2010-03-15

ListView 本意只是:让数据和TextView一次绑定 能自适应数据的长度 而自动+/-行数

 

 

但是 现在 要求 ListView 能支持 展开/隐藏 即:当点中某项时 其能显示更多内容 可以么? 当然

 

 

[代码 步骤]

1. 定义一下图片及文字数组 供显示用

int[] image = {
		R.drawable.beijing1_s,R.drawable.beijing2_s,R.drawable.beijing3_s,R.drawable.beijing4_s,R.drawable.beijing5_s
	};
	String[] text = {
		"贝贝","晶晶","欢欢","盈盈","妮妮"
	};

 

 

2. 定义BaseAdapter 并根据点击的ID 做比较 决定是否添加更多内容

public class ListMoreAdapter extends BaseAdapter {
    	Activity activity;
    	LayoutInflater lInflater;
    	
    	public ListMoreAdapter(Activity a){
    		activity = a;
    		
    		lInflater = activity.getLayoutInflater();
    	}
    	
		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return image.length;
		}

		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return null;
		}

		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			// TODO Auto-generated method stub
			LinearLayout layout = new LinearLayout(activity);
	        layout.setOrientation(LinearLayout.VERTICAL);
	        
	        layout.addView(addTitleView(position));
	        
	        
	        if(ID==position){
	        	layout.addView(addCustomView(position));
	        }
	        
			return layout;
		}
    	
		
		public View addTitleView(int i){
			LinearLayout layout = new LinearLayout(activity);
	        layout.setOrientation(LinearLayout.HORIZONTAL);
	        
	        ImageView iv = new ImageView(activity);
	        iv.setImageResource(image[i]);
	        
	        layout.addView(iv,
	        		new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
	        
	        
	        TextView tv = new TextView(activity);
	        tv.setText(text[i]);
	        
	        layout.addView(tv,
	        		new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
	        
	        layout.setGravity(Gravity.CENTER);
	        return layout;
		}
		
		
		public View addCustomView(int i){
			View view = new View(activity);
			
			switch(i){
			case 0:
				ImageView iv = new ImageView(activity);
				iv.setImageResource(R.drawable.beijing4_b);
				
				view = iv;
				break;
				
			case 1:
				view = lInflater.inflate(R.layout.layout1, null);
				break;
				
			case 2:
				
				break;
			}
			
			return view;
			
		}
    }

 

 

3. 代码比较简单 没什么细说的 不理解的请跟帖 好答复之

 

4. emulator 运行截图:

 

 

   发表时间:2010-03-10  
SimpleAdapter是否可以实现这种效果?我尝试把你的代码写到一个继承SimpleAdapter的自定义Adapter里面去,似乎不行
0 请登录后投票
   发表时间:2010-03-10  
sunburst 写道
SimpleAdapter是否可以实现这种效果?我尝试把你的代码写到一个继承SimpleAdapter的自定义Adapter里面去,似乎不行

应该可以吧 我的就是 extends BaseAdapter
不过你干嘛不直接 extends BaseAdapter呢?干嘛使用SimpleAdapter?
不解?有特殊要求么?
0 请登录后投票
   发表时间:2010-03-11  
gryphone 写道
sunburst 写道
SimpleAdapter是否可以实现这种效果?我尝试把你的代码写到一个继承SimpleAdapter的自定义Adapter里面去,似乎不行

应该可以吧 我的就是 extends BaseAdapter
不过你干嘛不直接 extends BaseAdapter呢?干嘛使用SimpleAdapter?
不解?有特殊要求么?

因为我用simpleAdapter绑定了一个数据样式,就是图标加一个大标题加一日期,然后再想实现你这个效果点击后展开
0 请登录后投票
   发表时间:2010-03-11  
sunburst 写道
gryphone 写道
sunburst 写道
SimpleAdapter是否可以实现这种效果?我尝试把你的代码写到一个继承SimpleAdapter的自定义Adapter里面去,似乎不行

应该可以吧 我的就是 extends BaseAdapter
不过你干嘛不直接 extends BaseAdapter呢?干嘛使用SimpleAdapter?
不解?有特殊要求么?

因为我用simpleAdapter绑定了一个数据样式,就是图标加一个大标题加一日期,然后再想实现你这个效果点击后展开

那那也可以直接extends BaseAdapter
至于extends SimpleAdapter 实话说 我没试过 不过应该一样的吧 因为其实际也是 extends BaseAdapter 不过你也可以试试
0 请登录后投票
   发表时间:2010-03-11  
为什么不用现成的ExpandableListView呢
0 请登录后投票
   发表时间:2010-03-14  
请LZ把本例的完整的代码发上来
0 请登录后投票
   发表时间:2010-03-15  
wjb_forward 写道
请LZ把本例的完整的代码发上来

OK!
0 请登录后投票
   发表时间:2010-03-15  
gryphone 写道
sunburst 写道
gryphone 写道
sunburst 写道
SimpleAdapter是否可以实现这种效果?我尝试把你的代码写到一个继承SimpleAdapter的自定义Adapter里面去,似乎不行

应该可以吧 我的就是 extends BaseAdapter
不过你干嘛不直接 extends BaseAdapter呢?干嘛使用SimpleAdapter?
不解?有特殊要求么?

因为我用simpleAdapter绑定了一个数据样式,就是图标加一个大标题加一日期,然后再想实现你这个效果点击后展开

那那也可以直接extends BaseAdapter
至于extends SimpleAdapter 实话说 我没试过 不过应该一样的吧 因为其实际也是 extends BaseAdapter 不过你也可以试试

我已经extends SimpleAdapter 了,所以不能extends BaseAdapter了,我尝试了一下,在SimpleAdapter,getview后面的加上楼主代码,在 SimpleAdapter原来getview中就会报错,去掉楼主的代码后正常
0 请登录后投票
   发表时间:2010-03-15  
sunburst 写道
gryphone 写道
sunburst 写道
gryphone 写道
sunburst 写道
SimpleAdapter是否可以实现这种效果?我尝试把你的代码写到一个继承SimpleAdapter的自定义Adapter里面去,似乎不行

应该可以吧 我的就是 extends BaseAdapter
不过你干嘛不直接 extends BaseAdapter呢?干嘛使用SimpleAdapter?
不解?有特殊要求么?

因为我用simpleAdapter绑定了一个数据样式,就是图标加一个大标题加一日期,然后再想实现你这个效果点击后展开

那那也可以直接extends BaseAdapter
至于extends SimpleAdapter 实话说 我没试过 不过应该一样的吧 因为其实际也是 extends BaseAdapter 不过你也可以试试

我已经extends SimpleAdapter 了,所以不能extends BaseAdapter了,我尝试了一下,在SimpleAdapter,getview后面的加上楼主代码,在 SimpleAdapter原来getview中就会报错,去掉楼主的代码后正常

个人感觉 如果extends SimpleAdapter 的话 可能要重新定义其构造函数 混入你自己的参数
0 请登录后投票
论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics