2017-10-17 3 views
0

Problem Sloverd ich versuchte Listenansicht in einem Fragment zu implementieren, ohne listfragment implentingAndroid-Implementierung ListVIEW in Fragment mit Base-Adapter, was mache ich falsch?

und eine eigene Adapter ohne irgendeine ArrayAdapter erstreckt oder ListAdapter (nur Fragment reicht) ..

(erstreckt sich nur BaseAdapter)

Mein folgender Code zeigt keinen Fehler, aber Listview wird nicht im Fragment angezeigt. Ich verwende einen benutzerdefinierten Adapter, um zwei editierte Texte zusammen anzuzeigen. Beim Debuggen kann ich sehen, dass der Adapter eine Liste in der Ansicht sendet, aber listview.setadapter() keine Daten bindet Kann mir jemand sagen, was ich falsch mache? Ich habe versucht, hier eine ähnliche Lösung zu finden, aber kein Glück. Ich würde mich über Rückmeldungen sehr freuen oder auf ein ähnliches Problem hinweisen. Fragment:

import android.app.Fragment; 
    import android.os.Bundle; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.widget.ListView; 
    import android.widget.TextView;  
    import java.util.ArrayList; 


    public class ResultFragment extends Fragment { 
     private DBHelper dbHelper=null; 
     ArrayList<MedicineModel> medicineModelList=new ArrayList<MedicineModel>(); 
     String selectedData=""; 
     CustomAdapterBrandResult adapter; 
     ListView listView; 

     public ResultFragment() { 
     } 
     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 

      View view= inflater.inflate(R.layout.fragment_result, container, false); 

      listView= (ListView) view.findViewById(R.id.resultList); 
      TextView textView=(TextView)view.findViewById(R.id.selected_text); 

      Bundle bundle=getArguments(); 
      if(bundle!=null){ 
       textView.setText(bundle.getString("selected_data")); 
       selectedData=(bundle.getString("selected_data")); 
      } 

      dbHelper=new DBHelper(this.getActivity()); 
      medicineModelList= dbHelper.getAllUsingBrandName(selectedData); 

      adapter=new CustomAdapterBrandResult(getActivity(), medicineModelList); 
      listView.setAdapter(adapter); 
      return view; 
     } 

    } 

Individuelle Adapter

import android.content.Context; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 
import java.util.ArrayList; 

public class CustomAdapterBrandResult extends BaseAdapter { 
    private Context mcontext; 
    private ArrayList<MedicineModel> medicineModelList; 
    public CustomAdapterBrandResult(Context mcontext, ArrayList<MedicineModel> medicineModelList) { 
     this.mcontext = mcontext; 
     this.medicineModelList = medicineModelList; 
    } 
    @Override 
    public int getCount() { 
     return medicineModelList.size(); 
    } 
    @Override 
    public Object getItem(int position) { 
     return medicineModelList.get(position); 
    } 
    @Override 
    public long getItemId(int position) { 
     return position; 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view=View.inflate(mcontext,R.layout.custom_layout_brand_result,null); 

     final TextView textViewBrand=(TextView)view.findViewById(R.id.textView2BrandName); 
     final TextView textViewManufacture=(TextView)view.findViewById(R.id.textView3Manufacture); 

     textViewBrand.setText(medicineModelList.get(position).getBrandName()); 
     textViewManufacture.setText(medicineModelList.get(position).getNameoftheManufacturer()); 
     return view; 
    } 
} 

Antwort

1

Endlich! Ich kann die Listview in meinem Fragment anzeigen. Überschreibe onCreate Methode und initialisierte Liste und adpater dort und in der OnCreateView Methode überschreiben einfach den Adapter auf die ListView, das heißt es. funktioniert per perfectly fein. Dank an die Jungs,

@IntelliJAmiya und
@Mikerizzo
, die auf meine Frage Stellung zu nehmen und verbrachten ihre Zeit es

Hier zu untersuchen ist die endgültige Lösung: Fragment

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Bundle bundle=getArguments(); 
     if(bundle!=null){ 

      selectedData=(bundle.getString("selected_data")); 
     } 

     dbHelper=new DBHelper(this.getActivity()); 
     medicineModelList= dbHelper.getAllUsingBrandName(selectedData); 
     adapter=new CustomAdapterBrandResult(getActivity(), medicineModelList); 


    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     View view= inflater.inflate(R.layout.fragment_result, container, false); 


     listView= (ListView) view.findViewById(R.id.resultList); 
     TextView textView=(TextView)view.findViewById(R.id.selected_text); 
     textView.setText(selectedData); 
     adapter.notifyDataSetChanged(); 
     listView.setAdapter(adapter); 


//  int a = listView.getAdapter().getCount(); 



     return view; 
    } 
+0

@ Mikerizzo hat es endlich gelöst, weiß aber nicht, warum ich diese trennen muss. trotzdem danke bro –

+1

@IntelliJA danke für die zeit, schätze es wirklich :) und sehe die lösung, du hattest recht, schlampiger fehler ... haha ​​ –

+0

Freut mich zu sehen, dass du das gelöst hast. –