2013-03-24 5 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()» переопределить адаптер и вернуть цветные виды. –

+0

http://stackoverflow.com/questions/10790984/how-to-set-an-image-as-background-image-on-a-click –

+0

Спасибо, сэр. Из-за вашего вопроса/проблемы моя проблема решена. (изменение фона ячейки при выборе, в то время как пользовательский фон уже установлен). –

ответ

1

Используйте этот в вашем getView() и посмотреть, если ваш фон изменения:

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

Не забудьте использовать @Override на getView():

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

} 
+0

«parent» в getView() - это gridView? – Dennis

+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

+0

в вашем случае да, это GridView – sebster

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; 

} 
Смежные вопросы