0

我有自定义BaseAdapter。我在GridView中使用了哪个。我试图通过位置(也变i的TextView的文本颜色) 这是我的baseadapter源改变项目背景颜色gridview在Android中按位置更改项目背景

public class ServiciesGridAdapter extends BaseAdapter { 
private Context context; 

private List<ServicesListItem> itemList; 

public ServiciesGridAdapter(Context context, List<ServicesListItem> mobileValues) { 
    this.context = context; 
    this.itemList = mobileValues; 

} 
public View getView(final int position, View convertView, ViewGroup parent) { 

    LayoutInflater inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View gridView; 
    if (convertView == null) { 
     gridView = new View(context); 
     gridView = inflater.inflate(R.layout.view_servisies_gridview_items, null); 

     final LinearLayout mainLayout = (LinearLayout) gridView.findViewById(R.id.gridview_items_layout); 


     final TextView serviciesID = (TextView) gridView.findViewById(R.id.servicies_grid_id); 
     final TextView serviciesName = (TextView) gridView.findViewById(R.id.servicies_grid_name); 
     serviciesID.setText(itemList.get(position).getName()); 
     serviciesName.setText(itemList.get(position).getIdentifier() + " EUR"); 



     mainLayout.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mainLayout.setBackgroundResource(R.drawable.rounded_corners_blue); 
       serviciesID.setTextColor(Color.parseColor("#ffffff")); 
       serviciesName.setTextColor(Color.parseColor("#ffffff")); 


      } 
     }); 

    } else { 
     gridView = (View) convertView; 
    } 

    return gridView; 
} 

@Override 
public int getCount() { 
    return itemList.size(); 
} 

@Override 
public Object getItem(int position) { 
    return null; 
} 

@Override 
public long getItemId(int position) { 
    return 0; 
} 


} 

,当我在项目上运行我的应用程序点击我可以改变背景颜色,但是当我检查另一项目,第一项的背景是相同的。简单地说,我想每次点击只更改一个项目背景。

我该如何解决我的问题?

回答

1

你必须重新设置所有其他观点的文字颜色和背景,所以做一个循环,做到这一点..尝试下面的代码

mainLayout.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     for(int i=0;i<parent.getChildCount();i++){ 
      View c = parent.getChildAt(i); 
      c.findViewById(R.id.gridview_items_layout).setBackgroundResource(defaultResource); 
      (TextView) c.findViewById(R.id.servicies_grid_id).setTextColor(defaultColor); 
      ((TextView) c.findViewById(R.id.servicies_grid_name)).setTextColor(defaultColor); 
     } 
     mainLayout.setBackgroundResource(R.drawable.rounded_corners_blue); 
     serviciesID.setTextColor(Color.parseColor("#ffffff")); 
     serviciesName.setTextColor(Color.parseColor("#ffffff")); 


    } 
}); 
+0

我试过了,但我有一个问题。背景已更改,但Textview的textcolor始终为白色.defaultColor现在可在textview中工作 –

+0

您在textView上使用的默认颜色? – Deepak

+0

#ff0000 @Deepak –

0

使用listSelector通过在GridView的位置变化项目背景..

添加颜色,你color.xml

<resources> 
<color name="onClickColor">#FFFFFF</color> 
</resources> 

添加selecter.xmldrawable文件夹

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item 
    android:state_pressed="true" 
    android:drawable="@color/onClickColor"> 
</item> 
</selector> 

增加listSelectorGridView

<GridView 
    android:id="@+id/grid_view" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:listSelector="@drawable/selecter"> 
</GridView> 

看一看this后...

+0

这也会改变textView的颜色吗? –

+0

他表示,他想改变项目背景他点击...显然它会改变gridvew索引背景...所以textview的颜色应该是对比... – Mohit