2016-05-03 7 views
0

ich eine benutzerdefinierte BaseAdapter Klasse erschaffe,Warum gibt der Basisparameter einen Fehler im Layout-Inflator?

public class CustomAdapter extends BaseAdapter { 

    Context c; 
    ArrayList<String> items; 

    CustomAdapter(Context c,ArrayList<String> items) 
    { 

     this.c=c; 
     this.items=items; 

    } 

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

    @Override 
    public Object getItem(int i) { 
     return items.get(i); 
    } 

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

    @Override 
    public View getView(int i, View view, ViewGroup viewGroup) { 

     View v= view; 
     TextView tv; 
     LayoutInflater layoutInflater = (LayoutInflater)c 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     ViewHolder pattern; 

     if(view==null) 
     { 

      v = layoutInflater.inflate(R.layout.dummy,viewGroup,true); 



      tv = (TextView)v.findViewById(R.id.textView); 

      pattern = new ViewHolder(v); 
      v.setTag(pattern); 
     } 
     else{ 
      pattern = (ViewHolder)v.getTag(); 
      return v; 
     } 

     pattern.tv.setText(items.get(i)); 



     return v; 
    } 
} 

ich diesen Fehler erhalten,

addView(View, LayoutParams) is not supported in AdapterView 

Es ist, weil ich ein true in diesem Code bin vorbei,

v = layoutInflater.inflate(R.layout.dummy,viewGroup,true); 

Meine Frage Warum gibt es einen Fehler, wenn wir hier wahr sind? Akzeptiert es nicht BaseAdapter?

Antwort

1

Der boolesche Parameter in der inflate-Methode legt fest, ob die erstellte Ansicht zur ViewGroup hinzugefügt werden soll, die Sie als zweiter Parameter angegeben haben. doc

Da Ihr 2. Parameter ein AdapterView ist, versucht Android, die View direkt zum AdapterView hinzuzufügen. AdapterView unterstützt jedoch die addView() - Methode nicht ref

Sie sollten die Ansicht nicht direkt der ViewGroup in der Methode getView() hinzufügen. Gib es einfach zurück und es sollte dir gut gehen.

+0

Der 2. Parameter ist das ListView richtig? Wie kann es der Adapterview sein? –

+0

Weil eine ListView eine AdapterView Vererbung ist. ListView und seine Vorfahren überschreiben diese Methode nicht - wahrscheinlich, um Missbrauch zu verhindern;) –

+0

Sie meinen also, wir können keine Ansicht zu einer Listenansicht oder einer Adapteransicht hinzufügen? –

Verwandte Themen