2015-07-19 4 views
0

У меня есть список и адаптер массива. Я хочу передать массив и создать список. Все идет нормально. Теперь следующая вещь, которую я хочу сделать, - добавить другой ресурс массива ниже уже созданного списка. Я не могу объединить два массива, потому что они должны иметь разные макеты. Есть ли способ достичь этого?Могу ли я добавить различные макеты в один список?

ответ

1

да вы можете

первую очередь вам нужно создать новый класс, который расширяет ArrayAdapter и переопределить метод GetView

class MyAdapter extends ArrayAdapter { 





public MyAdapter(Context context,ArrayList<MyClass> myarray) { 
    super(context,R.layout.yourlayout,myarray); 


} 



    @Override 
public View getView(int position, View convertView, ViewGroup parent) { 
/*this is also called when creating for the first time or once any view (row) is visible again */    


View view=null; 
MyClass object=(MyClass)getItem(position); 

//if true than choose the first layout 
if (object.layout1 == true) { 

view=LayoutInflater.from(getContext()).inflate(R.layout.yourlayout1, 
parent, false); 
}else if(object.layout2==true){ 
view=LayoutInflater.from(getContext()).inflate(R.layout.yourlayout2, 
parent, false); 

} 



} 

и теперь вы должны иметь класс, например под названием MyClass содержит

public class MyClass{ 
public boolean layout1; 
public boolean layout2; 
} 

так что, когда вы добавляете элемент в адаптер, вы добавляете объект MyClass, и все, что вам нужно сделать, это установить значения логического layout1 и layout2 в истинным или ложным, чтобы узнать, какой макет вы хотите выбрать

и чем пример добавления нового элемента в adpater, который вы хотите ему выбрать Layout2 является:

 MyClass object=new MyClass(); 
    object.layout1=false; 
    object.layout2=true; 
    //setting listview adpater 
    MyListView.setAdapter(new MyAdapter(this,new ArrayList<MyClass>())); 

    Myadapter.add((Object)object); 
Смежные вопросы