2017-10-17 8 views
0

J'essaye de faire un "catalogue" en obtenant les données d'une base de données dans les dossiers actifs et en les montrant dans un recycleur. Cette activité fonctionne déjà de son propre chef, je ne veux pas dire en fragments mais je veux le faire fonctionner dans un bottombar où j'appuie sur un élément, puis cet écran apparaît. Le problème que je pense qu'il est quand je tente d'appeler -> ____ (ce) Je suis nouveau dans ce domaine et je pense que ce n'est pas autorisé dans un fragment, je ne suis pas sûr .. Voici le code:Appelez la base de données (this) dans le fragment

public class CatalogoFragment extends Fragment { 
private static RecyclerView.Adapter adapter; 
private RecyclerView.LayoutManager layoutManager; 
private static RecyclerView recyclerView; 
public static ArrayList<DictObjectModel> data; 
DatabaseHelper db ; 
ArrayList<String> nombrelist; 
ArrayList<String> descripcionlist; 
LinkedHashMap<String,String> namelist; 
SearchView searchView; 
private Context mContexto=null; 
private View rootView = null; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //setContentView(R.layout.activity_main); 
    recyclerView = (RecyclerView) rootView.findViewById(R.id.my_recycler_view); 
    recyclerView.setHasFixedSize(true); 
    db= new DatabaseHelper(this); 
    searchView = (SearchView) rootView.findViewById(R.id.searchView); 
    searchView.setQueryHint("Buscar"); 
    searchView.setQueryRefinementEnabled(true); 
    layoutManager = new LinearLayoutManager(this); 
    recyclerView.setLayoutManager(layoutManager); 
    recyclerView.setItemAnimator(new DefaultItemAnimator()); 
    data = new ArrayList<DictObjectModel>(); 
    fetchData(); 

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
      newText = newText.toLowerCase(); 

      final ArrayList<DictObjectModel> filteredList = new ArrayList<DictObjectModel>(); 

      for (int i = 0; i < nombrelist.size(); i++) { 

       final String text = nombrelist.get(i).toLowerCase(); 
       if (text.contains(newText)) { 

        filteredList.add(new DictObjectModel(nombrelist.get(i),descripcionlist.get(i))); 
       } 
      } 
      adapter = new CustomAdapter(filteredList); 
      recyclerView.setAdapter(adapter); 


      return true; 
     } 
    }); 
    mContexto = getActivity(); 
} 

private void fragment_catalogo(){ 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    rootView = inflater.inflate(R.layout.fragment_catalogo, container, false); 
    fragment_catalogo(); 

    return rootView; 
} 

public void fetchData() 
{ 
    db = new DatabaseHelper(mContexto); 
    try { 

     db.createDataBase(); 
     db.openDataBase(); 

    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 


    namelist=new LinkedHashMap<>(); 
    int ii; 
    SQLiteDatabase sd = db.getReadableDatabase(); 
    Cursor cursor = sd.query("Productos" ,null, null, null, null, null, null); 
    ii=cursor.getColumnIndex("nombre"); 
    nombrelist=new ArrayList<String>(); 
    descripcionlist= new ArrayList<String>(); 
    while (cursor.moveToNext()){ 
     namelist.put(cursor.getString(ii), cursor.getString(cursor.getColumnIndex("descripcion"))); 
    } 
    Iterator entries = namelist.entrySet().iterator(); 
    while (entries.hasNext()) { 
     Map.Entry thisEntry = (Map.Entry) entries.next(); 
     nombrelist.add(String.valueOf(thisEntry.getKey())); 
     //QUITAR el - 
     descripcionlist.add(""+String.valueOf(thisEntry.getValue())); 
    } 

    for (int i = 0; i < nombrelist.size(); i++) { 
     data.add(new DictObjectModel(nombrelist.get(i), descripcionlist.get(i))); 
    } 

    adapter = new CustomAdapter(data); 
    recyclerView.setAdapter(adapter); 
} 

}

Le problème est dans le public void onCreate (deux lignes)

db= new DatabaseHelper(this); 

layoutManager = new LinearLayoutManager(this); 
+0

Déplacer findViewById code dans onCreateView() et vérifier les méthodes du cycle de vie du fragment –

+0

Il ne fonctionne toujours pas bro :( –

+0

Je vous donne pas la solution. Il suffit d'informer sont gonflés onCreateView de ce point de vue() –

Répondre

0

tout d'abord déplacer findViewById dans oncreateView() procédé selon cycle de vie du fragment.

Remplacer this à getActivity().