2017-10-17 5 views
0

problème Sloverd, je tente de mettre en œuvre listview dans un fragment sans implenting listfragmentandroid- Implémentation de ListVIew en Fragment à l'aide de l'adaptateur de base, qu'est-ce que je fais de mal?

(étend tout fragment)

et un adaptateur personnalisé sans étendre toute ArrayAdapter ou ListAdapter .. (Étend simplement BaseAdapter)

Mon code suivant ne montre aucune erreur mais listview n'apparaît pas dans le fragment. J'utilise un adaptateur personnalisé pour montrer deux edittext ensemble. pendant le débogage je peux voir l'adaptateur envoyant une liste dans la vue mais listview.setadapter() ne liant aucune donnée Quelqu'un peut-il me dire ce que je fais mal? J'ai essayé de trouver une solution similaire ici mais pas de chance. J'apprécierais grandement tout commentaire ou pointant vers un problème similaire comme celui-ci. 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; 
     } 

    } 

Adaptateur personnalisé

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; 
    } 
} 

Répondre

1

Enfin! capable d'afficher le listview dans mon fragment.Ajouté sur la méthode onCreate override et liste intialized et adpater là et dans la méthode override onCreateView juste définir l'adaptateur sur le listview, c'est-à-dire .. travailler par parfaitement bien. Merci aux gars,

@IntelliJAmiya et
@Mikerizzo
qui commentent sur ma question et ont passé leur temps pour examiner

Voici la solution finale: 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 l'a finalement résolu mais je ne sais toujours pas pourquoi je dois les séparer. de toute façon merci bro –

+1

@IntelliJA merci pour le temps, vraiment l'apprécier :) et voir la solution, vous aviez raison, erreur bâclée ... haha ​​ –

+0

heureux de vous voir résolu codage Happy! –