在GridView控件设置背景按项目位置 [英] Set Background in GridView by item position
本文介绍了在GridView控件设置背景按项目位置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想改变在GridView的具体项目的背景颜色(位置)。
gridview.getChildAt(1).setBackgroundResource(android.R.drawable.btn_default);
不起作用。
如果我在OnClickListener使用它的工作原理:
公共无效onItemClick(适配器视图<>母公司,观景,
INT位置,长的id){
view.setBackgroundResource(android.R.drawable.btn_default);
}
但我想改变它没有一个点击。
的修改的
ImageAdapter:
公共类ImageAdapter延伸BaseAdapter {
。私人最终字符串标记=的getClass()的toString();私人语境mContext;公共ImageAdapter(上下文C){
mContext = C;
}公众诠释的getCount(){
返回mThumbIds.length;
}公共对象的getItem(INT位置){
返回null;
}众长getItemId(INT位置){
返回0;
}公共查看getView(INT位置,查看convertView,父母的ViewGroup){
ImageView的ImageView的;
如果(convertView == NULL){//如果它没有回收,初始化一些属性
ImageView的=新ImageView的(mContext);
imageView.setLayoutParams(新GridView.LayoutParams(85,85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8,8,8,8);
}其他{
ImageView的=(ImageView的)convertView;
} parent.getChildAt(1).setBackgroundColor(Color.RED); imageView.setImageResource(mThumbIds [位置]);
返回ImageView的;
}
活动:
最终的GridView的GridView =(GridView控件)view.findViewById(R.id.gridView);
gridview.setAdapter(新ImageAdapter(MainActivity.this));
gridview.setSelection(0);
gridview.setOnItemClickListener(新AdapterView.OnItemClickListener(){
查看previous = NULL;
@覆盖
公共无效onItemClick(适配器视图<>母公司,观景,
INT位置,长的id){
如果(previous ==视图){
view.setBackgroundResource(android.R.drawable.btn_default);
}其他{
view.setBackgroundResource(android.R.drawable.btn_default);
如果(previous!= NULL)previous.setBackgroundResource(0);
previous =视图;
} }
});
XML:
< GridView控件
机器人:ID =@ + ID / GridView控件
机器人:layout_width =match_parent
机器人:layout_height =match_parent
机器人:比重=中心
机器人:为numColumns =4>
< / GridView的>
解决方案
您可以使用的setBackground的项目适配器。
试试这个。
item_image.xml
< LinearLayout中的xmlns:机器人=http://schemas.android.com/apk/res/android
机器人:layout_width =match_parent
机器人:layout_height =match_parent><的LinearLayout
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:背景=@绘制/ bg_item_selection> < ImageView的
机器人:layout_width =200dp
机器人:layout_height =200dp/>
< / LinearLayout中>
bg_item_selection.xml
<选择的xmlns:机器人=http://schemas.android.com/apk/res/android><项目机器人:可绘制=@色/ white_color机器人:STATE_ pressed =FALSE/>
<项目机器人:可绘制=@彩色/黑白/>
在适配器。
@覆盖
公共查看getView(最终诠释的立场,观点convertView,父母的ViewGroup){
// TODO自动生成方法存根
ItemUserEntity itemUserEntity =新ItemUserEntity();
itemUserEntity = arrayList.get(位置);
LayoutInflater吹气=(LayoutInflater)mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
如果(convertView == NULL){ convertView = inflater.inflate(R.layout.item_image,父母,
假);
}
返回convertView;}
I want to change the background color for specific item in GridView (by position).
gridview.getChildAt(1).setBackgroundResource(android.R.drawable.btn_default);
doesn't work.
If I use it in OnClickListener it works:
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
view.setBackgroundResource(android.R.drawable.btn_default);
}
but I want to change it without a click.
EDIT
ImageAdapter:
public class ImageAdapter extends BaseAdapter {
private final String TAG = getClass().toString();
private Context mContext;
public ImageAdapter(Context c) {
mContext = c;
}
public int getCount() {
return mThumbIds.length;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) { // if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
parent.getChildAt(1).setBackgroundColor(Color.RED);
imageView.setImageResource(mThumbIds[position]);
return imageView;
}
Activity:
final GridView gridview = (GridView) view.findViewById(R.id.gridView);
gridview.setAdapter(new ImageAdapter(MainActivity.this));
gridview.setSelection(0);
gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
View previous = null;
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if(previous == view) {
view.setBackgroundResource(android.R.drawable.btn_default);
} else {
view.setBackgroundResource(android.R.drawable.btn_default);
if(previous != null) previous.setBackgroundResource(0);
previous = view;
}
}
});
XML:
<GridView
android:id="@+id/gridView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:numColumns="4" >
</GridView>
解决方案
You can use setBackground for Item Adapter.
Try this. item_image.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_item_selection">
<ImageView
android:layout_width="200dp"
android:layout_height="200dp" />
</LinearLayout>
bg_item_selection.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/white_color" android:state_pressed="false"/>
<item android:drawable="@color/black"/>
In Adapter.
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ItemUserEntity itemUserEntity = new ItemUserEntity();
itemUserEntity = arrayList.get(position);
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = inflater.inflate(R.layout.item_image, parent,
false);
}
return convertView;
}
这篇关于在GridView控件设置背景按项目位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文