Android: После нажатия на кнопку back не отображаются данные из предыдущей активити

252
18 ноября 2017, 09:54

У меня есть DishesActivity и DishActivity. Из DishesActivity я попадаю в DishActivity и при нажатии на кнопку home(back) в тулбаре я попадаю на DishesActivity, но он почему-то пустой. В логах нет никаких ошибок. Саму кнопку back я настроил, тестил даже с новым проектом. Т.е я создал новый проект, добавил две активити и эта кнопка работает нормально, информация с предыдущей активити отображается. Но это потому что активити предельно простое с одной textview.
В моем же случае, DishesActivity использует Realm, RecyclerView.

Ниже код: DishesActivity.java

public class DishesActivity extends AppCompatActivity {
    private GridLayoutManager lLayout;
    public static final String categoryIdField = "categoryId";
    private static RealmResults<Dish> dishes;
    private Realm realm;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dishes);
        //настройка REALM
        realm = Realm.getDefaultInstance();
        lLayout = new GridLayoutManager(DishesActivity.this, 2);
        Intent intent = getIntent();
        int categoryId = intent.getIntExtra(CategoryId, 0);
        dishes = realm.where(Dish.class).equalTo(categoryIdField, categoryId).findAll();
      initRecyclerView();
    }
    public void initRecyclerView() {
        //отображаем данные в RecyclerView
        RecyclerView rView = (RecyclerView)findViewById(R.id.recycler_view_dishes);
        rView.setHasFixedSize(true);
        rView.setLayoutManager(lLayout);
        RecyclerViewDishAdapter rcAdapter = new RecyclerViewDishAdapter(DishesActivity.this, dishes);
        rView.setAdapter(rcAdapter);
    }
    public static RealmResults<Dish> getDishes() {
        return dishes;
    }
}

DishActivity.java

    public class DishActivity extends AppCompatActivity {
        private ImageView imageView;
        private TextView textViewRu;
        private Context context;
        private RealmResults<Dish> dishes;
        private Realm realm;
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_dish);
            imageView = (ImageView) findViewById(R.id.dishImageView);
            textViewRu = (TextView) findViewById(R.id.textViewRu);
            Intent intent = getIntent();
            int dishIntentId = intent.getIntExtra(CategoryId, 0);
            context = getApplicationContext();
            //настройка REALM
            realm = Realm.getDefaultInstance();
            dishes = DishesActivity.getDishes();
            textViewRu.setText(dishes.get(dishIntentId).getTitleRu());
            Glide.with(context).load(dishes.get(dishIntentId).getImgUrl()).into(imageView);
            Toolbar dishToolBar = (Toolbar) findViewById(R.id.dish_toolbar);
            setSupportActionBar(dishToolBar);
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setDisplayShowHomeEnabled(true);
            getSupportActionBar().setTitle(dishes.get(dishIntentId).getTitleRu());
        }
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            int id = item.getItemId();
            if(id == android.R.id.home) {
                this.finish();
            }
            return super.onOptionsItemSelected(item);
        }
    }

RecyclerViewDishHolders.java - это холдер для DishesActivity

public class RecyclerViewDishHolders extends RecyclerView.ViewHolder implements View.OnClickListener {
    public TextView titleRu;
    public TextView titleEng;
    public ImageView categoryImage;
    private Context context;
    public static final String DISH_ID = "DISH_ID";
    public RecyclerViewDishHolders(View itemView) {
        super(itemView);
        itemView.setOnClickListener(this);
        titleRu = (TextView)itemView.findViewById(R.id.textViewTitleRu);
        titleEng = (TextView)itemView.findViewById(R.id.textViewTitleEng);
        categoryImage = (ImageView)itemView.findViewById(R.id.imageViewCategory);
        categoryImage.setAdjustViewBounds(true);
        context = itemView.getContext();
    }
    @Override
    public void onClick(View view) {
        int itemViewPosition = getAdapterPosition();
        Toast.makeText(view.getContext(), "Clicked Dish Position = " + itemViewPosition, Toast.LENGTH_SHORT).show();
        Intent intent = new Intent(context, DishActivity.class);
        intent.putExtra(DISH_ID, itemViewPosition);
        context.startActivity(intent);
    }
}

И последнее это адаптер:

public class RecyclerViewDishAdapter extends 
RecyclerView.Adapter<RecyclerViewDishHolders> {
    private List<Dish> itemList;
    private Context context;
    public RecyclerViewDishAdapter(Context context, List<Dish> itemList) {
        this.itemList = itemList;
        this.context = context;
    }
    @Override
    public RecyclerViewDishHolders onCreateViewHolder(ViewGroup parent, int viewType) {
        View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.category_view_list, null);
        RecyclerViewDishHolders rcv = new RecyclerViewDishHolders(layoutView);
        return rcv;
    }
    @Override
    public void onBindViewHolder(RecyclerViewDishHolders holder, int position) {
        holder.titleRu.setText(itemList.get(position).getTitleRu());
        holder.titleEng.setText(itemList.get(position).getTitleEng());
        Glide.with(context).load(itemList.get(position).getImgUrl()).into(holder.categoryImage);
    }
    @Override
    public int getItemCount() {
        return this.itemList.size();
    }
}

Не могу понять в чем проблема, но есть подозрение что при возврате на предыдущее активити адаптер не хочет отображать данные из массива, но не знаю почему и как это исправить.

READ ALSO
&lt;%@ include jsp:include с переменной

<%@ include jsp:include с переменной

Делаю таки образомЕсть одна страница main

213
Получение частоты звука

Получение частоты звука

Вот у меня есть3gpp файл, и я знаю путь к нему в виде String

242
Gradle com.bmuschko.tomcat plugin tomcatRun fails

Gradle com.bmuschko.tomcat plugin tomcatRun fails

После maven стал изучать gradle и столкнулся с проблемой, не получается сделать деплой проекта (gradle 43

342