2017-10-17 27 views
0

中调用数据库(this)我试图通过从文件夹资产中的数据库中获取数据并将其显示在recycleviewer中来制作“目录”。 这个活动已经在它自己的工作,我的意思是不在片段,但我想让它在底部工作,我按下一个项目,然后这个屏幕出现。 的问题,我认为这是当我尝试调用 - > ____(本) 我在这是新,我想是不是在允许的片段,即时通讯不知道.. 下面是代码:在片段

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

}

的问题是在公共无效的onCreate(接下来的两行)中的所有的

db= new DatabaseHelper(this); 

layoutManager = new LinearLayoutManager(this); 
+0

移动findViewById在onCreateView(代码),并检查片段 –

+0

它的生命周期方法仍无法正常工作的兄弟:( –

+0

我不给你解决,只是通知视图的在onCreateView() –

回答

0

首先在oncreateView()方法移动findViewById作为每个片段的生命周期。

this替换为getActivity()