在GridView控件设置背景按项目位置 [英] Set Background in GridView by item position

查看:91
本文介绍了在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:机器人=htt​​p://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:机器人=htt​​p://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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆