现在的位置: 首页 > 综合 > 正文

GridView 子View 获取

2018年04月22日 ⁄ 综合 ⁄ 共 6689字 ⁄ 字号 评论关闭

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

 

http://griffinshi.iteye.com/blog/605335#comments

 

 

 

[代码 步骤]

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

 

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

Java代码
复制代码
 收藏代码
  1. int count = 5;   
  2.     int[] image = {   
  3.             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   
  4.     };   
  5.     String[] name = {   
  6.             "贝贝","晶晶","欢欢","盈盈","妮妮"  
  7.     };  

 

* 定义包含二者的View

 

Java代码
复制代码
 收藏代码
  1. public View composeLayout(int i){   
  2.             LinearLayout layout = new LinearLayout(activity);   
  3.             layout.setOrientation(LinearLayout.VERTICAL);   
  4.                
  5.             ImageView iv = new ImageView(activity);   
  6.             iv.setImageResource(image[i]);   
  7.                
  8.             layout.addView(iv,   
  9.                     new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));   
  10.                
  11.                
  12.             TextView tv = new TextView(activity);   
  13.             tv.setGravity(Gravity.CENTER_HORIZONTAL);   
  14.             tv.setTextColor(Color.BLACK);   
  15.             tv.setText(name[i]);   
  16.                
  17.             layout.addView(tv,   
  18.                     new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));   
  19.                
  20.                
  21.             return layout;   
  22.                
  23.         }  

 

 

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

Java代码
复制代码
 收藏代码
  1. public class ComplexLayoutAdapter extends BaseAdapter {   
  2.         Activity activity;   
  3.            
  4.         public ComplexLayoutAdapter(Activity a){   
  5.             activity = a;   
  6.         }   
  7.         @Override  
  8.         public int getCount() {   
  9.             // TODO Auto-generated method stub
      
  10.             return count;   
  11.         }   
  12.   
  13.         @Override  
  14.         public Object getItem(int position) {   
  15.             // TODO Auto-generated method stub
      
  16.             return null;   
  17.         }   
  18.   
  19.         @Override  
  20.         public long getItemId(int position) {   
  21.             // TODO Auto-generated method stub
      
  22.             return position;   
  23.         }   
  24.   
  25.         @Override  
  26.         public View getView(int position, View convertView, ViewGroup parent) {   
  27.             // TODO Auto-generated method stub
      
  28.             return composeLayout(position);   
  29.         }   
  30.            
  31.            
  32.     }  

 

 

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

Java代码
复制代码
 收藏代码
  1. grid.setOnItemClickListener(new OnItemClickListener(){   
  2.   
  3.             @Override  
  4.             public void onItemClick(AdapterView<?> arg0, View arg1,   
  5.                     int arg2, long arg3) {   
  6.                 // TODO Auto-generated method stub
      
  7.                    
  8.                 //重置上次颜色为Color.BLACK
      
  9.                 setLastColorBlack();   
  10.                    
  11.                 LinearLayout lLayout = (LinearLayout)arg1;   
  12.                    
  13.                 //ImageView lImage = (ImageView)lLayout.getChildAt(0);
      
  14.                 TextView lText = (TextView)lLayout.getChildAt(1);   
  15.                    
  16.                 //lImage.setBackgroundResource(R.drawable.dot);
      
  17.                 lText.setTextColor(Color.RED);   
  18.                    
  19.                    
  20.             }   
  21.                
  22.         });  

 

 

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

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

Java代码
复制代码
 收藏代码
  1. int last = 0;  

 

* 修改 setOnItemClickListener() 如下:

Java代码
复制代码
 收藏代码
  1. grid.setOnItemClickListener(new OnItemClickListener(){   
  2.   
  3.             @Override  
  4.             public void onItemClick(AdapterView<?> arg0, View arg1,   
  5.                     int arg2, long arg3) {   
  6.                 // TODO Auto-generated method stub
      
  7.                    
  8.                 //重置上次颜色为Color.BLACK
      
  9.                 setLastColorBlack();   
  10.                    
  11.                 LinearLayout lLayout = (LinearLayout)arg1;   
  12.                    
  13.                 //ImageView lImage = (ImageView)lLayout.getChildAt(0);
      
  14.                 TextView lText = (TextView)lLayout.getChildAt(1);   
  15.                    
  16.                 //lImage.setBackgroundResource(R.drawable.dot);
      
  17.                 lText.setTextColor(Color.RED);   
  18.                    
  19.                 //保存最新的上次ID   
  20.                 last = arg2;   
  21.             }   
  22.                
  23.         });   
  24.   
  25.   
  26. public void setLastColorBlack(){   
  27.         LinearLayout lastLayout = (LinearLayout)grid.getChildAt(last);   
  28.            
  29.         TextView lastText = (TextView)lastLayout.getChildAt(1);   
  30.            
  31.         lastText.setTextColor(Color.BLACK);   
  32.            
  33.     }  

 

 

that's all!

 

6. emulator 运行截图:

 

 

 

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

 

抱歉!评论已关闭.