GridView 子View 获取
来源:互联网 发布:差额计算法步骤 编辑:程序博客网 时间:2024/06/05 23:44
在eoe.android论坛浏览时 发现很多人对这个问题有困惑 所以今天说一下
http://griffinshi.iteye.com/blog/605335#comments
[代码 步骤]
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 = {
- "贝贝","晶晶","欢欢","盈盈","妮妮"
- };
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;
- }
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);
- }
- }
public class ComplexLayoutAdapter extends BaseAdapter { Activity activity; public ComplexLayoutAdapter(Activity a){ activity = a; }@Overridepublic int getCount() {// TODO Auto-generated method stubreturn count;}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn null;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubreturn 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);
- }
- });
grid.setOnItemClickListener(new OnItemClickListener(){@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1,int arg2, long arg3) {// TODO Auto-generated method stub//重置上次颜色为Color.BLACKsetLastColorBlack();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;
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);
- }
grid.setOnItemClickListener(new OnItemClickListener(){@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1,int arg2, long arg3) {// TODO Auto-generated method stub//重置上次颜色为Color.BLACKsetLastColorBlack();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);//保存最新的上次IDlast = 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 运行截图:
现上传代码 供有需要的人!
- GridView 子View 获取
- robotium gridview获取子view方法(笔记)
- robotium gridview获取子view方法(笔记)
- Android GridView获取子View(并操作)
- Android GridView获取其中任意子View(并操作)详解
- GridView和子View之间的间隙
- 使用获取subview获取子view
- 2011/05/27 单击gridview的子view
- ViewPager使用方法及子View的获取
- 子View获取父容器的引用
- android recylerview 中如何获取子view?
- 自定义ViewGroup获取子View参数
- 通过子View获取当前Activity视图
- 一行代码诠释获取GridView中的子控件
- 在gridview中的adapter中引入gridview,并获取其中子控件的值
- ViewPager获取当前显示(焦点)子view
- 安卓 Activity中获取ListView子View中控件
- iOS使用递归来获取view的所有子视图
- 首份视频报告:日本网民每月平均点击242.5个视频
- iPad用户体验准则
- 详解进程文件锁FileLock
- 单链表实现类2(按关键字查找与删除)
- 前台线程和后台线程
- GridView 子View 获取
- Android常见错误处理
- 关于firebug的一些讲解
- 总结——复杂网络动力学
- WebService之.net与java远程调用
- Xcode 彻底切换View的方法
- JXTA——JAVA P2P网络编程技术(入门篇)
- Android模拟按键——源码环境下开发应用程序
- GZIP压缩和解压