2013-03-24 66 views
4

我想在GridView中(按位置)更改特定项目的背景颜色。在GridView中按项目位置设置背景

gridview.getChildAt(1).setBackgroundResource(android.R.drawable.btn_default); 

不起作用。

如果我在OnClickListener使用它,它的工作原理:

public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
    view.setBackgroundResource(android.R.drawable.btn_default); 
} 

,但我想改变它没有一个点击。


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; 
} 

活动:

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> 
+1

覆盖适配器的'getView()'并返回彩色视图。 – 2013-03-24 13:58:16

+0

http://stackoverflow.com/questions/10790984/how-to-set-an-image-as-background-image-on-a-click – 2014-09-15 05:17:48

+0

谢谢先生。由于你的问题/问题,我的问题解决了。 (在自定义背景已设置的情况下,更改选择单元格的背景)。 – 2014-10-08 13:41:24

回答

1

使用此getView(),看看你的背景变化:

gridView.getChildAt(position).setBackgroundColor(Color.RED); 

不要忘记使用@OverridegetView()

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

} 
+0

getView()中的'parent'是gridView? – Dennis 2013-03-24 15:49:35

+0

'GridView gridview =(GridView)parent.findViewById(R.id.gridView); gridview.getChildAt(0).setBackgroundResource(android.R.drawable.btn_default);''和'parent..getChildAt(0).setBackgroundResource(android.R.drawable.btn_default);'不起作用。 – Dennis 2013-03-24 15:53:39

+0

你的情况是的,这是GridView – sebster 2013-03-24 15:54:07

1

试试这个

@Override 
    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; 
     } 


     if(position==1) 
      imageview.setBackgroundColor(Color.RED); 

     imageView.setImageResource(mThumbIds[position]); 
     return imageView; 
    } 
1

可以使用的setBackground的项目适配器。

试试这个。 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"/> 

在适配器。

@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; 

}