android关于gridview动态更改某项背景的有关问题
android关于gridview动态更改某项背景的问题
最近发现android的gridview里的部分函数并不能实现描述里的功能,比如getChildAt(int),必须要通过重写BaseAdapter里的getView(int, View, ViewGroup)可以实现返回在某个位置的View组件。可我现在想实现的功能是,显示出来的GridView中的某些项的背景与其它的不同,这些并不一定都会被用户点击。本以为获得了这个组件直接设置它的背景就可以,但似乎并没有任何变化,请大家出出主意,有关的代码在下面
CusApp.java:
main.xml
infoAdapter.java
------解决方案--------------------
你可以直接在baseadpte的getview方法设置你想要不同背景的view就好了,
你想要实现的功能也很简单啊。
------解决方案--------------------
在外面定义一个map,map的key为gridview的子view的position,value就是你要设置的颜色值,
你在baseadpate的getview中写个
if(map.containKey(position)){
view.setBackgroundColor(map.get(postition));
}
你只要动态改变map里面的值,就能动态改变gridview中的item了
最近发现android的gridview里的部分函数并不能实现描述里的功能,比如getChildAt(int),必须要通过重写BaseAdapter里的getView(int, View, ViewGroup)可以实现返回在某个位置的View组件。可我现在想实现的功能是,显示出来的GridView中的某些项的背景与其它的不同,这些并不一定都会被用户点击。本以为获得了这个组件直接设置它的背景就可以,但似乎并没有任何变化,请大家出出主意,有关的代码在下面
CusApp.java:
- Java code
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 code
<?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.java
- Java code
public 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; } }
------解决方案--------------------
你可以直接在baseadpte的getview方法设置你想要不同背景的view就好了,
你想要实现的功能也很简单啊。
------解决方案--------------------
在外面定义一个map,map的key为gridview的子view的position,value就是你要设置的颜色值,
你在baseadpate的getview中写个
if(map.containKey(position)){
view.setBackgroundColor(map.get(postition));
}
你只要动态改变map里面的值,就能动态改变gridview中的item了