Как вызвать popbackstack и не удалять предыдущие записи в backstack, чтобы я мог использовать его снова? - PullRequest
0 голосов
/ 15 июня 2019

У меня есть собственный календарь, который показывает 7 дней недели в верхней части упражнения.Я хочу, чтобы когда пользователь нажимал в день, чтобы добавить новый фрагмент с уникальным тегом, я мог бы перезвонить и показать его снова с данными, введенными пользователем, когда пользователь нажимает в тот же день, которые уже нажимают и помещают данные.Вот как выглядит мое приложение -> http://prntscr.com/o276v6

Я пытаюсь сделать это с помощью addtoBackStack (tag) и вызвать popbackstack.

public class CalendarView extends LinearLayout{
...

private FragmentManager manager;
private FragmentTransaction transaction;
 private CalendarAdapter mAdapter; //CalendarAdapter is a class that i make to fill the gridview with dates


...

 private void setGridCellClickEvents(){ //when a date pressed
    calendarGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            manager=((Activity)context).getFragmentManager(); //FragmentManager
            HomeFragment selected=new HomeFragment();
            int position1=position; //position in gridview 1-7
            Object current_date= mAdapter.getItem(position); //getting the selected date from the adapter as object
            String tag =formater1.format(current_date); //format the date from the object 
            boolean backstack_exist =manager.popBackStackImmediate(tag,0);
            if (!backstack_exist && manager.findFragmentByTag(tag) == null){
                transaction= manager.beginTransaction(); //FragmentTransaction
                transaction.replace(R.id.user_frame,selected,"position"+position)
                        .addToBackStack(tag) // addtobackstack with unique tag e.g 15 06 19
                        .commit();
            }else {
                manager.popBackStack(tag,0); //popbackstack that unique tag
            }

            Log.d(TAG,"Changed");
        }
    });

Но с помощью popbackstack удалите предыдущие записи в backstack, поэтому я теряю фрагменты с данными. Так что я думаю, что использование popbackstack - неправильный способ, или я могу переопределить некоторые методы, такие как onDestroy, чтобы не удалять фрагменты при вызовеметод поп-стека.Или я должен сделать что-то в onSaveInstanceState, чтобы сохранить мой фрагмент и данные?Я новичок в Android, использующий некоторый код и ссылку на ссылку, поэтому я понимаю ваш код и узнаю что-нибудь по достоинству.

1 Ответ

0 голосов
/ 19 июня 2019

Этот метод может помочь вам сохранить фрагмент при выполнении.

 public static void SetFragment(Fragment mFragment, Context mcontext,String title)
    {
        String backStateName = mFragment.getClass().getName();
        FragmentTransaction ft = masterFragmentManager.beginTransaction();
        ft.replace(R.id.content_frame, mFragment,backStateName);
        ft.addToBackStack(null);
        ft.commit();

        if (((AppCompatActivity)mcontext).getSupportActionBar() != null) {
            ((AppCompatActivity)mcontext). getSupportActionBar().setTitle(title);
        }
    }

Здесь для просмотра фрагмента popbackstack

  ft.addToBackStack(null);
...