2013-12-10 3 views
0

Я хочу, чтобы установить цвет фона для каждого 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); 

    } 

Я также проверил некоторую prevoious запросы переполнения стека и обнаружил, что они предполагают, как

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

но показывают исключение null указателя в моем случае

ответ

0

NPE предположил бы, что вы пытаетесь изменить цвета фона в своем основном действии, чего не может быть сделано. Чтобы изменить View типов List или Grid, вы должны сделать это внутри своего [пользовательского] 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/ Надеюсь, что это помогает!

+0

Да, я получил его сейчас. Я должен изменить цвет в адаптере, как вы сказали. Спасибо за помощь. – Kunu

+0

Не забудьте принять или перенести. Либо хорошо :) Рад, что я мог бы помочь! – LokiSinclair

0

Я не могу согласиться с тем, что говорит @LokiSinclair. Несколько точек, чтобы добавить

  1. Предпочтительно настроить адаптер пути расширения BaseAdapter
  2. В GetView (INT положения, Вид convertView, ViewGroup родитель) метод, вам нужно установить фон ресурс/цвет на возвращенном ваше мнение в зависимости от ваши условия, такие как позиция.

Как указывал @LokiSinclair, ссылка на учебное пособие является прекрасной для начала.

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