最近发现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;
}
}
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;
}
}
你想要实现的功能也很简单啊。
你在baseadpate的getview中写个
if(map.containKey(position)){
view.setBackgroundColor(map.get(postition));
}你只要动态改变map里面的值,就能动态改变gridview中的item了
将每个item 对应的颜色值用ArrayList 存起来 . 2. 改变颜色的时候修改 colors 对应item 的值3. 在BaseAdapter 在getView 方法 某个项背景 颜色设置 4. 调用 SimpleAdapter 调用 notifyDataSetChanged
想的.自己没实现过
}
} 这里面的arg1是一个父控件。一般来说是 linerlayout之类的 , 你用arg1.findViewById();这时候得到的才是gridview中的item控件