`
gryphone
  • 浏览: 433496 次
  • 性别: 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  
学习了!  谢谢啊

相关推荐

    GridView从后台获取数据实现多行多列

    最后,如果我们想要获取GridView中某个TextView的文本内容,可以为每个子视图设置一个唯一的ID,然后在点击事件中通过`findViewById()`找到对应的TextView,并调用`getText().toString()`获取文本。 总的来说,实现...

    GridView的点击事件

    在`onItemClick()`方法中,我们可以通过`AdapterView.OnItemClickListener`提供的参数获取到被点击的项目位置、视图以及整个GridView。下面是一个简单的示例: ```java gridView.setOnItemClickListener(new ...

    android Gridview分页实现

    GridView是ListView的一种变体,它按照指定的列数来排列子视图。默认情况下,GridView会一次性加载所有数据,这可能导致内存溢出,尤其是在数据量大的情况下。因此,我们需要实现分页加载,即按需加载数据。 分页...

    GridView跨行demo

    在自定义的View中,可以调整子View的位置和大小,以适应跨行的需求。 6. **处理位置冲突** 跨行的View可能会与相邻的View产生位置冲突,因此在设置View高度时,需要考虑避免覆盖其他View。可以通过计算当前位置和...

    详谈自定义View之GridView单选 金额选择Layout-ChooseMoneyLayout

    在Android开发中,自定义View是一项重要的技能,它允许开发者根据特定需求定制界面元素。本文将深入探讨如何创建一个自定义的GridView,实现单选功能并用于金额选择,这个自定义布局称为`ChooseMoneyLayout`。 `...

    安卓GridView布局控件

    1. 使用ViewHolder模式:避免在`getView()`方法中频繁查找子View,提高性能。 2. 合理使用缓存:复用convertView,减少对象创建。 3. 数据加载策略:分页加载,避免一次性加载大量数据导致内存压力过大。 4. 避免在`...

    GridView系列---GridView固定表头

    1. GridView是LinearLayout的子类,它会把每个子视图(View)按照横行纵列的方式进行排列。 2. GridView通过Adapter来获取数据并将其显示在界面上。Adapter通常是BaseAdapter或CursorAdapter的子类,负责数据的绑定...

    Gridview用法大总结

    GridView通过Adapter来获取数据源,并将数据转化为可显示的视图。Adapter可以根据需求进行自定义,以适应不同类型的数据显示。 二、GridView的使用 1. 布局文件配置 在XML布局文件中,我们需要创建一个GridView标签...

    GridView源码

    分析GridView的源码,我们可以看到它如何处理触摸事件、如何测量和布局子View,以及如何与Adapter协作。这对于优化性能、解决特定问题或实现自定义功能非常有帮助。 总之,学习GridView源码对于深入理解Android UI...

    GridView中的Item放大缩小

    GridView继承自AbsListView,它会根据指定的列数自动调整子视图的大小,以填满整个屏幕。默认情况下,GridView的每个Item都是等大小的。要在GridView中实现Item的放大缩小,我们需要自定义一个GridView的Adapter,...

    Android GridView使用例子

    - 考虑使用ViewHolder设计模式,减少查找子View的时间。 - 如果数据量大,可以考虑使用AsyncTaskLoader和CursorLoader进行异步加载。 7. **自定义项布局** 在`getView()`方法中,可以通过LayoutInflater从XML...

    android下GridView用法

    - **实现适配器的方法**:包括`getCount()`(返回数据项数量)、`getItem(int position)`(获取指定位置的数据项)、`getItemId(int position)`(返回数据项的ID,通常为位置索引)以及`getView(int position, View ...

    Gridview 视图控件的使用

    适配器包含四个方法:`getCount()`返回数据集大小,`getItem(int position)`获取指定位置的数据项,`getItemId(int position)`返回数据项的唯一标识,以及最重要的`getView(int position, View convertView, ...

    android中gridView实例

    2. **Adapter**:GridView的工作原理是通过Adapter来获取和展示数据。你需要创建一个继承自BaseAdapter的类,重写其四个关键方法:`getCount()`、`getItem(int position)`、`getItemId(int position)`和`getView(int...

    GridView实现漂亮的多选效果

    GridView继承自AbsListView,它会在垂直方向上滚动,并将子视图排列成行和列。在XML布局文件中,我们可以使用`&lt;GridView&gt;`标签来添加GridView,并设置其属性,如列数(`android:numColumns`)、间距(`android:...

    HorizontalScrollView嵌套GridView实现水平滚动

    最后,别忘了在XML布局文件中解析这两个组件,并将GridView作为HorizontalScrollView的唯一子视图。在解析XML时,注意使用适当的属性设置GridView和ListView的大小和位置,以便它们能正确地显示和交互。 通过以上...

    GridView 用法详解

    适配器负责将数据转化为GridView可显示的View。例如,我们可以通过继承BaseAdapter并重写其`getCount()`,`getItem()`,`getItemId()`和`getView()`方法来实现自定义适配器。 4. ** 视图复用** `getView()`方法中...

    GridView使用方法总结.rar_gridview

    在适配器中,我们可以在`getView()`方法内为每个子视图设置监听器: ```java convertView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int position = (int) v....

    安卓gridview

    GridView继承自ViewGroup,它会根据设定的列数自动调整子视图(Views)的大小和位置,使得它们均匀地填充整个屏幕。每个子视图通常对应数据集中的一个条目。 2. **基本使用**: - 在XML布局文件中添加GridView...

    Android GridView分组带下拉刷新

    将SwipeRefreshLayout作为GridView的父布局,设置GridView为它的子视图。当用户执行下拉手势时,SwipeRefreshLayout会触发一个回调,在回调中可以执行数据加载的逻辑,更新GridView的数据源,并调用adapter的...

Global site tag (gtag.js) - Google Analytics