2017-12-23 3 views
0

Ich habe eine Aktivität mit ListView.Android Kontext für LayoutInflater

Adapter für dieses ListView Ich habe von android.widget.BaseAdapter erstellt:

public class SaleItemAdapter extends BaseAdapter { 

... 

    @Override 
    public View getView(int position, View view, ViewGroup viewGroup) { 
     SaleItem saleItem = saleItems.get(position); 
     if (saleItem.getFolder()) { 
      view = LayoutInflater.from(context).inflate(R.layout.list_folder_item, viewGroup); 
      TextView nameFolder = view.findViewById(R.id.nameFolder); 
      nameFolder.setText(saleItem.getName()); 
     } else { 
      view = LayoutInflater.from(context).inflate(R.layout.list_sale_item, viewGroup); 
     } 
     return view; 
    } 

Die Frage ist: Welche Art von Kontext ich für LayoutInflater verwenden?

Ich versuchte getApplicationContext() aus meiner Tätigkeit zu verwenden, wenn instantiate Adapter-Objekt adapter = new SaleItemAdapter(this.getApplicationContext()); aber es einen Absturz auf meine Anwendung nach dieser Codezeile verursacht:

view = LayoutInflater.from(context).inflate(R.layout.list_folder_item, viewGroup); 
+0

Was macht Ihr stacktrace Fehler sagen? Ich denke, das Problem liegt in der Art wie du den Inflater bekommst. – Marlon

+0

Wie kann ich StackTrace-Fehler in Android Studio 3.1 erhalten? Sorry für newbe Frage ... –

+0

Öffnen Sie Logcat (Abkürzung alt + 6) auf Android-Studio. Wenn Sie ein Gerät angeschlossen haben oder ein Emulator läuft, werden dort alle Protokolle angezeigt. – Marlon

Antwort

3

allererst Sie LayoutInflater wie diese

zu initialisieren haben
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

Und sie aufblasen Ihre Ansicht wie diese

view = mInflater.inflate(R.layout.your_layout, null); 
+0

Frage ist wo 'Kontext' zu finden? –

0

Sie haben Instanz Context context in Adapter-Klasse erstellen constructor dann diese context verwenden für Code unten Layout-Check Aufpumpen

 public class SaleItemAdapter extends BaseAdapter { 
    private Context context; 

    ... 
     public DischargeAdapter(Context context){ 
     this.context = context; 

    } 

     @Override 
     public View getView(int position, View view, ViewGroup viewGroup) { 
      SaleItem saleItem = saleItems.get(position); 
      if (saleItem.getFolder()) { 
       view = LayoutInflater.from(context).inflate(R.layout.list_folder_item, viewGroup); 
       TextView nameFolder = view.findViewById(R.id.nameFolder); 
       nameFolder.setText(saleItem.getName()); 
      } else { 
       view = LayoutInflater.from(context).inflate(R.layout.list_sale_item, viewGroup); 
      } 
      return view; 
     } 
0

Welche Art von Kontext ich für LayoutInflater verwenden?

Sie müssen den Hauptaktivitätskontext übergeben. Versuchen Sie dieses,

Verwendung:

MainActivity:

adapter = new SaleItemAdapter(this); 

SaleItemAdapter:

view = LayoutInflater.from(context).inflate(R.layout.list_sale_item, null); 

Statt

MainActivity:

adapter = new SaleItemAdapter(this.getApplicationContext()); 

SaleItemAdapter:

view = LayoutInflater.from(context).inflate(R.layout.list_sale_item, viewGroup); 

Ihre SaleItemAdapter einen Konstruktor definieren sollte,

public class SaleItemAdapter extends BaseAdapter { 
    private Context mContext; 

    public SaleItemAdapter (Context context){ 
    mContext = context; 
    } 

@Override 
public View getView(int position, View view, ViewGroup viewGroup) { 
    SaleItem saleItem = saleItems.get(position); 
    if (saleItem.getFolder()) { 
     view = LayoutInflater.from(mContext).inflate(R.layout.list_folder_item, null); 
     TextView nameFolder = (TextView) view.findViewById(R.id.nameFolder); 
     nameFolder.setText(saleItem.getName()); 
    } else { 
     view = 
    LayoutInflater.from(mContext).inflate(R.layout.list_sale_item, null); 
    } 
    return view; 
}