`
gryphone
  • 浏览: 427293 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

GridView 子View 获取

阅读更多

 

在eoe.android论坛浏览时 发现很多人对这个问题有困惑 所以今天说一下

 

 

[代码 步骤]

1. 你要放入GricView 的布局比较复杂 包括一个image & text 且二者以线性排列

 

* 定义图片和文字的数组 供后续使用

int count = 5;
	int[] image = {
			R.drawable.beijing_001_big,R.drawable.beijing_002_big,R.drawable.beijing_003_big,R.drawable.beijing_004_big,R.drawable.beijing_005_big
	};
	String[] name = {
			"贝贝","晶晶","欢欢","盈盈","妮妮"
	};

 

* 定义包含二者的View

 

public View composeLayout(int i){
			LinearLayout layout = new LinearLayout(activity);
	        layout.setOrientation(LinearLayout.VERTICAL);
	        
	        ImageView iv = new ImageView(activity);
	        iv.setImageResource(image[i]);
	        
	        layout.addView(iv,
	        		new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
	        
	        
	        TextView tv = new TextView(activity);
	        tv.setGravity(Gravity.CENTER_HORIZONTAL);
	        tv.setTextColor(Color.BLACK);
	        tv.setText(name[i]);
	        
	        layout.addView(tv,
	        		new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
	        
	        
	        return layout;
	        
		}

 

 

2. 因为View 不是TextView 所有只能自己扩展BaseAdapter

public class ComplexLayoutAdapter extends BaseAdapter {
    	Activity activity;
    	
    	public ComplexLayoutAdapter(Activity a){
    		activity = a;
    	}
		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return count;
		}

		@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
			return composeLayout(position);
		}
		
		
    }

 

 

3. 使用问题 因为不是今天的重点 就此略过 现在说下 更改 TextView 使之为红色的问题 当其被点击时

grid.setOnItemClickListener(new OnItemClickListener(){

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1,
					int arg2, long arg3) {
				// TODO Auto-generated method stub
				
				//重置上次颜色为Color.BLACK
				setLastColorBlack();
				
				LinearLayout lLayout = (LinearLayout)arg1;
				
				//ImageView lImage = (ImageView)lLayout.getChildAt(0);
				TextView lText = (TextView)lLayout.getChildAt(1);
				
				//lImage.setBackgroundResource(R.drawable.dot);
				lText.setTextColor(Color.RED);
				
				
			}
        	
        });

 

 

4. 当然 我们还需要把上次点击目标的字体颜色重置

* 定义变量 last 用于标记上次点击的ID

int last = 0;

 

* 修改 setOnItemClickListener() 如下:

grid.setOnItemClickListener(new OnItemClickListener(){

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1,
					int arg2, long arg3) {
				// TODO Auto-generated method stub
				
				//重置上次颜色为Color.BLACK
				setLastColorBlack();
				
				LinearLayout lLayout = (LinearLayout)arg1;
				
				//ImageView lImage = (ImageView)lLayout.getChildAt(0);
				TextView lText = (TextView)lLayout.getChildAt(1);
				
				//lImage.setBackgroundResource(R.drawable.dot);
				lText.setTextColor(Color.RED);
				
				//保存最新的上次ID
				last = arg2;
			}
        	
        });


public void setLastColorBlack(){
    	LinearLayout lastLayout = (LinearLayout)grid.getChildAt(last);
    	
    	TextView lastText = (TextView)lastLayout.getChildAt(1);
    	
    	lastText.setTextColor(Color.BLACK);
    	
    }

 

 

that's all!

 

6. emulator 运行截图:

 

 

 

现上传代码 供有需要的人!

 

分享到:
评论
4 楼 JavaJ2me 2011-07-29  
lLayout.getChildAt(1);  
不太理解。。
3 楼 lc228 2010-11-09  
学习中,非常不错,谢谢!
2 楼 goontosoon 2010-05-14  
这篇文章不错,解决问题
1 楼 meiyouren 2010-03-19  
学习了!  谢谢啊

相关推荐

    android监听View加载完成的示例讲解

    最近项目中需要实现一个GridView显示6*5=30项,并铺满整个界面,界面中还有自定义ActionBar等其他控件,所以需要获取剩下屏幕的高度。通过百度得知View有一个监听函数,亲测使用有效,特此记录,方便日后查阅。 gv_...

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--ListView之动态添加子view |--ListView优化之分页加载 |--ListView优化之动态加载 |--ListView优化之控制getView实现复杂显示 |--ListView优化之标准写法 |--listview老虎机 界面设计 水果机 |--listview页面...

    C#编程经验技巧宝典

    115 &lt;br&gt;0192 如何获取“我的文档”系统文件夹路径 115 &lt;br&gt;0193 如何获取应用程序当前执行的路径 116 &lt;br&gt;0194 如何获取当前操作系统的信息 116 &lt;br&gt;0195 如何实现基本数据类型随意转换 116...

    Android 开发技巧

    4.6.11、列表视图(List View) 96 4.6.12、NoteList 99 4.7、TAB与TABHOST 106 4.8、RATINGBAR 110 4.8.1、例一 110 4.8.2、例二 112 4.9、DATE/TIME SET 115 4.9.1、DatePicker/TimePicker 115 4.9.2、...

    Android开发资料合集-World版!

    4.6.11、列表视图(List View) 96 4.6.12、NoteList 99 4.7、TAB与TABHOST 106 4.8、RATINGBAR 110 4.8.1、例一 110 4.8.2、例二 112 4.9、DATE/TIME SET 115 4.9.1、DatePicker/TimePicker 115 4.9.2、...

    Android实例代码

    第2章、Android应用程序界面设计,即View 2.2、布局管理(Layout):LinearLayout、TableLayout、FrameLayout、RelativeLayout; 2.3、基本界面组件:TextView、EditText; Button、ImageButton; 9Patch; RadioButton...

    疯狂Android讲义(第2版)源代码 第6章~第9章

    第2章、Android应用程序界面设计,即View 2.2、布局管理(Layout):LinearLayout、TableLayout、FrameLayout、RelativeLayout; 2.3、基本界面组件:TextView、EditText; Button、ImageButton; 9Patch; RadioButton...

    零基础学ASP.NET 2.0电子书&源代码绝对完整版1

    4-11.aspx 使用Server对象来获取文件路径。 4-12.aspx 使用Server对象对字符进行编码。 4-13.aspx 使用Server对象进行解码。 4-14.aspx 向客户机器写入Cookie。 4-15.aspx 读取Cookie。 ...

    疯狂Android讲义源码

     2.4.11 网格视图(GridView)和  图像切换器(ImageSwitcher)  功能和用法 104  2.4.12 画廊视图(Gallery)的功能和  用法 107  2.5 对话框 110  2.5.1 使用AlertDialog创建简单  对话框 110  2.5.2 ...

    疯狂Android讲义.part2

    2.4.11 网格视图(GridView)和 图像切换器(ImageSwitcher) 功能和用法 104 2.4.12 画廊视图(Gallery)的功能和 用法 107 2.5 对话框 110 2.5.1 使用AlertDialog创建简单 对话框 110 2.5.2 使用AlertDialog创建...

    疯狂Android讲义.part1

    2.4.11 网格视图(GridView)和 图像切换器(ImageSwitcher) 功能和用法 104 2.4.12 画廊视图(Gallery)的功能和 用法 107 2.5 对话框 110 2.5.1 使用AlertDialog创建简单 对话框 110 2.5.2 使用AlertDialog创建...

    精通ANDROID 3(中文版)1/2

    2.2.1 View  2.2.2 Activity  2.2.3 Intent  2.2.4 ContentProvider  2.2.5 Service  2.2.6 AndroidManifest.xml  2.2.7 AVD  2.3 Hello World!  2.4 AVD  2.5 剖析Android应用程序的结构  2.6...

    精通Android 3 (中文版)2/2

    2.2.1 View  2.2.2 Activity  2.2.3 Intent  2.2.4 ContentProvider  2.2.5 Service  2.2.6 AndroidManifest.xml  2.2.7 AVD  2.3 Hello World!  2.4 AVD  2.5 剖析Android应用程序的结构  2.6...

    asp.net知识库

    GridView控件使用经验 ASP.NET 2.0:弃用 DataGrid 吧,有新的网格控件了! ASP.NET2.0控件一览---标准控件(1) ASP.NET2.0控件一览---标准控件(2) ASP.NET 2.0中使用webpart系列控件 ASP.NET 2.0 中实现跨页提交 新...

    零基础学ASP.NET 2.0&源代码绝对完整版1

    4-11.aspx 使用Server对象来获取文件路径。 4-12.aspx 使用Server对象对字符进行编码。 4-13.aspx 使用Server对象进行解码。 4-14.aspx 向客户机器写入Cookie。 4-15.aspx 读取Cookie。 第5章(\Chapter 05) ...

    ASP.NET2.0高级编程(第4版)1/6

    本书全面介绍了ASP.NET各种编程技能和2.0版中的巨大变化,并详细阐述了2.0版中的每个新特性。书中提供了大量的实例,可帮助读者快速掌握如何在.NET平台下开发功能强大的ASP.NET应用程序。本书适合有一些基础的ASP...

    2.ASP.NET.2.0.高级编程(第4版) [1/7]

    6.4 MultiView和View服务器控件 175 6.5 Wizard服务器控件 179 6.5.1 定制边栏导航 181 6.5.2 AllowReturn属性 182 6.5.3 使用StepType属性 182 6.5.4 给Wizard控件添加标题 183 6.5.5 使用向导的导航系统 183...

Global site tag (gtag.js) - Google Analytics