Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为gridview中的不同项目设置不同的背景色?_Java_Android_Gridview_Android Gridview - Fatal编程技术网

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

Java 如何为gridview中的不同项目设置不同的背景色?,java,android,gridview,android-gridview,Java,Android,Gridview,Android Gridview,我想为每个gridview项目设置不同的背景色,我已经这样尝试过了 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.places_gridview); prepareList(); mAdapter = new PlacesGridViewAdapter

我想为每个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);

    }

但在我的例子中,它显示空指针异常

NPE会建议您尝试更改主要活动中的背景颜色,这是无法做到的。要更改列表或网格类型的
视图
,您必须在[custom]
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.
}
这里可以找到一个很好的例子:
希望这有帮助

我完全同意@Lokisinlair所说的话。需要补充的几点

  • 最好通过扩展BaseAdapter来定制您的适配器
  • 在getView(int-position、View-convertView、ViewGroup-parent)方法中,需要根据位置等条件将背景资源/颜色设置为返回的视图

  • 正如@LokiSinclair所指出的,教程链接是一个很好的开始。

    是的,我现在知道了。如你所说,我必须改变适配器的颜色。谢谢你的帮助。别忘了接受,或者投票。两者都可以:)很高兴我能帮忙!
    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.
    }