如何为gridview中的不同项设置不同的背景颜色?

时间:2013-12-10 15:31:30

标签: java android gridview android-gridview

我想为每个gridview项目设置不同的背景颜色,我试过这样的

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.places_gridview);

        prepareList();

        mAdapter = new PlacesGridViewAdapter(this, listTitle, listIcon);
        gridview = (GridView) findViewById(R.id.gridView);

        gridview.setAdapter(mAdapter);


    }

    public void prepareList() {

        listTitle = new ArrayList<String>();

        listTitle.add("Hotel");
        listTitle.add("Taxi");
        listTitle.add("Cafe");
        listTitle.add("Train");
        listTitle.add("School");
        listTitle.add("Parlor");
        listTitle.add("Gas");
        listTitle.add("Fire");

        listIcon = new ArrayList<Integer>();

        listIcon.add(R.drawable.hotel);
        listIcon.add(R.drawable.taxi_meter);
        listIcon.add(R.drawable.cafe);
        listIcon.add(R.drawable.train);
        listIcon.add(R.drawable.school);
        listIcon.add(R.drawable.parlor);
        listIcon.add(R.drawable.gas);
        listIcon.add(R.drawable.fire_station);

    }

我还检查了一些重要的堆栈溢出查询,发现他们建议像

gridview.getChildAt(1).setBackgroundColor(
                    Color.parseColor("#001111"));

但它在我的情况下显示空指针异常

2 个答案:

答案 0 :(得分:0)

NPE会建议您尝试更改主要活动中的背景颜色,这是无法完成的。要更改列表或网格类型的View,您必须在[自定义] ArrayAdapter内和getView方法内更改,然后您才能够在充气时将其访问。像:

public View getView(int position, View convertView, ViewGroup parent)
{
    LayoutInflater inflater = (LayoutInflater)this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View rowView = inflater.inflate(this.layout, parent, false);

    SomeObject obj = (SomeObject)data[position];

    // Then access like so:
    SomeView sv = (SomeView)rowView.findViewById(R.id.some_view);
    // then access methods and properties as you normally would.
}

可以在这里找到一个很好的例子:http://www.mkyong.com/android/android-gridview-example/ 希望这有帮助!

答案 1 :(得分:0)

我不能同意@LokiSinclair所说的话。几点要补充

  1. 最好通过扩展BaseAdapter
  2. 来自定义您的适配器
  3. 在getView(int position,View convertView,ViewGroup parent)方法中,您需要根据条件(如基于位置)将背景资源/颜色设置为返回的视图。
  4. 正如@LokiSinclair指出的那样,教程链接是一个很好的开始。