最近发现android的gridview里的部分函数并不能实现描述里的功能,比如getChildAt(int),必须要通过重写BaseAdapter里的getView(int, View, ViewGroup)可以实现返回在某个位置的View组件。可我现在想实现的功能是,显示出来的GridView中的某些项的背景与其它的不同,这些并不一定都会被用户点击。本以为获得了这个组件直接设置它的背景就可以,但似乎并没有任何变化,请大家出出主意,有关的代码在下面
CusApp.java:public class CusApp extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        initScreen();
    }    public void initScreen(){
     GridView infoGrid = (GridView)findViewById(R.id.infoGrid);
    
     infoGrid.setAdapter(new InfoAdapter(this));
     infoGrid.setOnItemClickListener(new myItemClickListener());     TextView tv = (TextView)(infoGrid.getAdapter().getView(0);
     tv.setBackgroundColor(Color.RED);
    }    protected class myItemClickListener implements OnItemClickListener{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
         
         }
    }
}
main.xml<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:id="@+id/messageLayout"
android:layout_gravity="top" 
         android:orientation="vertical"
android:layout_width="fill_parent" 
         android:layout_height="wrap_content">
<GridView android:id="@+id/infoGrid" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:numColumns="3"
android:verticalSpacing="10px" android:horizontalSpacing="10px"
android:columnWidth="150px" android:stretchMode="columnWidth"
android:gravity="center" android:background="#00000000"/>
</LinearLayout>infoAdapter.javapublic class InfoAdapter extends BaseAdapter {
private Context mContext;
private String[] itemContent = {"item 1","item 2","item 3","item 4","item 5","item 6"};

public InfoAdapter(Context c){
mContext = c;
}

@Override
public int getCount() {
return itemContent.length;
} @Override
public Object getItem(int position) {
return null;
} @Override
public long getItemId(int arg0) {
return 0;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView;        
if (convertView == null) {
textView = new TextView(mContext);
textView.setGravity(Gravity.CENTER);
textView.setTextColor(Color.BLACK);
textView.setTypeface(Typeface.create("", Typeface.BOLD));
textView.setTextSize(20);
textView.setTransformationMethod(new SingleLineTransformationMethod());
} else {
textView = (TextView) convertView;        
}    
textView.setBackgroundColor(Color.BLUE);    
textView.setText(itemContent[position]);
return textView;
}
}

解决方案 »

  1.   

    好像之前理解的有问题,getView不是得到了某项的组件,而是得到了一个和某个组件一样的新组件,所以才会改不了……现在问题又回到了,怎么获取GridView中某个组件的对象,咋办呢?
      

  2.   

    你可以直接在baseadpte的getview方法设置你想要不同背景的view就好了,
    你想要实现的功能也很简单啊。
      

  3.   

    在外面定义一个map,map的key为gridview的子view的position,value就是你要设置的颜色值,
    你在baseadpate的getview中写个
    if(map.containKey(position)){
       view.setBackgroundColor(map.get(postition));
    }你只要动态改变map里面的值,就能动态改变gridview中的item了
      

  4.   

    1.  ArrayList<HashMap<String, Object>> colors = new ArrayList<HashMap<String, Object>>();
     将每个item 对应的颜色值用ArrayList 存起来 . 2. 改变颜色的时候修改 colors 对应item 的值3. 在BaseAdapter 在getView 方法 某个项背景 颜色设置 4. 调用 SimpleAdapter  调用  notifyDataSetChanged
    想的.自己没实现过  
      

  5.   

    改变view以后,如何通知gridview刷新?
      

  6.   

     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
              
             }
        } 这里面的arg1是一个父控件。一般来说是 linerlayout之类的 , 你用arg1.findViewById();这时候得到的才是gridview中的item控件