Есть база данных с рецептами в 6 таблицах. При вызове Navigatioт Drawer закрывается,но notifyDataSetChanged данные не обновляет. Остаются те данные, которые вызваны вinitRecyclerView
Вот код Activity
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
private DrawerLayout drawer;
RecyclerView recyclerView;
RecipeAdapter adapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initRecyclerView();
initDrawerNavigation();
}private void initRecyclerView() {
recyclerView= (RecyclerView) findViewById(R.id.recycler_list);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter=new RecipeAdapter(this);
adapter.setRecipes(Tables.DRINKS.getTableName());
recyclerView.setAdapter(adapter);
}
private void initDrawerNavigation() {
Toolbar toolbar=(Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle(R.string.app_name);
NavigationView navigationView = (NavigationView) findViewById(R.id.navigation);
drawer=(DrawerLayout) findViewById(R.id.drawer);
ActionBarDrawerToggle toggle=new ActionBarDrawerToggle(this,drawer,toolbar, R.string.drawer_open,R.string.drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
navigationView.setNavigationItemSelectedListener(this);
drawer.openDrawer(GravityCompat.START);
}
@Override
public boolean onNavigationItemSelected(MenuItem item) {
String table = Tables.MEAT.getTableName();
switch (item.getItemId()){
case R.id.action_open_cakes:
table =Tables.CAKES.getTableName();
break;
case R.id.action_open_drinks:
table = Tables.DRINKS.getTableName();
break;
case R.id.action_open_fishes:
table = Tables.FISHES.getTableName();
break;
case R.id.action_open_meat:
table=Tables.MEAT.getTableName();
break;
case R.id.action_open_salads:
table = Tables.SALADS.getTableName();
break;
case R.id.action_open_soups:
table =Tables.SOUPS.getTableName();
break;
}
drawer = (DrawerLayout) findViewById(R.id.drawer);
drawer.closeDrawer(GravityCompat.START);
((RecipeAdapter)recyclerView.getAdapter()).setRecipes(table);
recyclerView.getAdapter().notifyDataSetChanged();
return true;
}
@Override
public void onBackPressed(){
drawer = (DrawerLayout) findViewById(R.id.drawer);
if (drawer.isDrawerOpen(GravityCompat.START)){
drawer.closeDrawer(GravityCompat.START);
}
else{
super.onBackPressed();
}
}
Это код адаптера
public class RecipeAdapter extends RecyclerView.Adapter<RecipeAdapter.RecipeHolder>{
Context context;
List<Recipe> recipes;
public RecipeAdapter(Context context){
this.context=context;
Log.i("adapter","adapter is created");
}
public void setRecipes(String table) {
RecipeLab recipeLab=RecipeLab.getInstance(context);
recipes=recipeLab.getRecipes(table);
}
@Override
public RecipeHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v= LayoutInflater.from(context.getApplicationContext()).inflate(R.layout.recipe_item,parent,false);
Log.i("recyclerView","RecipeHolder is created");
return new RecipeHolder(v);
}
@Override
public void onBindViewHolder(RecipeHolder holder, int position) {
Log.i("recyclerView","RecipeHolder is binded");
holder.bindRecipe(recipes.get(position));
}
@Override
public int getItemCount() {
return recipes.size();
}
public class RecipeHolder extends RecyclerView.ViewHolder{
TextView name;
RatingBar ratingBar;
public RecipeHolder(View itemView) {
super(itemView);
name= (TextView) itemView.findViewById(R.id.tv_name);
ratingBar=(RatingBar) itemView.findViewById(R.id.ratingBar);
}
public void bindRecipe(Recipe recipe){
name.setText(recipe.getName());
ratingBar.setRating((float)recipe.getRate());
}
}
И если поможет Recipe Lab
public class RecipeLab {
private SQLiteDatabase database;
private static RecipeLab instance;
public static RecipeLab getInstance(Context context) {
if (instance ==null){
instance =new RecipeLab(context);
}
return instance;
}
private RecipeLab(Context context) {
database=new RecipesSQLHelper(context.getApplicationContext()).getReadableDatabase();
}
public List<Recipe> getRecipes(String table){
Cursor c= database.query(table,null,null,null,null,null,null);
RecipeCursorWrapper cursorWrapper=new RecipeCursorWrapper(c);
List<Recipe> list=new ArrayList<>();
cursorWrapper.moveToFirst();
if (cursorWrapper.getColumnCount()==0){
return list;
}
while(!cursorWrapper.isAfterLast()){
Recipe recipe=cursorWrapper.getRecipe();
recipe.setTable(table);
list.add(recipe);
cursorWrapper.moveToNext();
}
cursorWrapper.close();
return list;
}
}
Надеюсь на помощь
Navigation drawer, появляются ли вList<Recipe> recipesв адаптере новые данные? – s8am Sep 01 '16 at 11:42