-1

so i got one main activity that has a Tablayout and a ViewPager to present diffrent fragments.

when i move between the fragments with my Tablayout everything works good, but if i use a button to open fragment, when going back to the former fragment (by pushing the cancel button) the elements of the fragment i left staying on the screen (as in the picture).

i tried to use a method viewPager.setCurrentItem(0); in the fragment to go back to the homepage from the fragment instade of ft.replace(R.id.fragment_edit_reminder, new Main_Activity_fragment()).commit(); but it didn't moved back to my home fragment (with the repalce it does go back but as i saied the elements.

this is my main:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final TabLayout tableLayout = findViewById(R.id.Tablayouting);
        final ViewPager viewPager = findViewById(R.id.ViewPager);
        PagerAdapter pagerAdapter = new 
        PagerAdapter(getSupportFragmentManager(),tableLayout.getTabCount());
        viewPager.setAdapter(pagerAdapter);


        tableLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());

            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });
    }

}

this is the fragment:

public class edit_reminder_fragment extends Fragment implements View.OnClickListener {

    private Button cancelButton;

    public edit_reminder_fragment() {
        // Required empty public constructor
    }

    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @return A new instance of fragment edit_reminder_fragment.
     */
    public static edit_reminder_fragment newInstance() {
        edit_reminder_fragment fragment = new edit_reminder_fragment();
        Bundle args = new Bundle();

        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {

        }
    }

    @RequiresApi(api = Build.VERSION_CODES.O)
    public void onClick(View view)//TODO: make a utility method for switching fragments on the main_activity_fragment(see note).
    {
        switch (view.getId()) {//recognizing what button was pushed

            case R.id.ButtonCancelReminder:
             //region
                FragmentTransaction ft = getFragmentManager().beginTransaction();
                Main_Activity_fragment maf = new Main_Activity_fragment();
                ft.replace(R.id.fragment_edit_reminder, maf).commit();

                break;
            //endregion
        }

    }

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

        cancelButton = view.findViewById(R.id.ButtonCancelReminder);
        cancelButton.setOnClickListener(this);

        return view;
    }
}

my pagerAdapted class:

public class PagerAdapter extends FragmentPagerAdapter {
    //https://www.youtube.com/watch?v=HHd-Fa3DCng&ab_channel=MasterCoding

    private int numOfTabs;

    public PagerAdapter(FragmentManager fm, int numOfTabs) {
        super(fm);
        this.numOfTabs = numOfTabs;
    }


    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return new Main_Activity_fragment();
            case 1:
                return new key_words_fragment();
            case 2:
                return new groups_and_points_fragment();
            case 3:
                return new Fragment_Past_Reminders();
            case 4:
                return new edit_reminder_fragment();
            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return numOfTabs;
    }
}

in the picture we see the home page fragment ,on it 3 buttons (cancel, save, Add a sub reminder) that stayed from a fragment that open when clicking on the ADD NEW REMINDER button (when clicking on cancel in the second fragment it's going back to the home page):

home page fragment with the elements that stayed for the second fragment

tnuva
  • 35
  • 5

1 Answers1

0

First, try the following as an adaper:

 public class PagerAdapter extends 
FragmentPagerAdapter {
    
    private final ArrayList<Fragment> mFragments = new ArrayList<>();
    private final ArrayList<String> mFragmentTitle = new ArrayList<>();
    
    public PagerAdapter(FragmentManager mManager) {
        super(mManager);
    }
    
    @Override
    public Fragment getItem(int position) {
        return mFragments.get(position);
    }

    @Override
    public int getCount() {
        return mFragments.size();
    }
    
    public void addFragment(Fragment fragment, String title) {
        mFragments.add(fragment);
        mFragmentTitle.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitle.get(position);
    }

    public Fragment getFragment(int position) {
        if (position < mFragments.size() && position >= 0) {
            return mFragments.get(position);
        }
        return null;
    }
    
}

Then in your MainActivity's onCreate, initialize the following:

mTabs = (TabLayout) findViewById(R.id.tabs);
mPager = (ViewPager) findViewById(R.id.view_pager);
mMainAdapter = new PagerAdapter( getSupportFragmentManager() );

setupContents();

Then the private method setupContents() as follows:

mMainAdapter.addFragment(new FragmentOne(), getResources().getString(R.string.tab_albums));
mMainAdapter.addFragment(new FragmentTwo(), getResources().getString(R.string.tab_songs));
mMainAdapter.addFragment(new FragmentThree(), getResources().getString(R.string.tab_playlists));
// you can add as many fragments as you wish 
//just follow the previous method @mMainAdapter.addFragment
mPager.setAdapter(mMainAdapter);
mTabs.setupWithViewPager(mPager);

To get the current fragment:

public Fragment getCurrentFragment() {
        return mMainAdapter.getFragment(mPager.getCurrentItem());
    }

To check if the current fragment is FragmentOne:

private boolean isFragmentOne() {
        return getCurrentFragment() instanceof FragmentOne;
    }
private static
  • 745
  • 8
  • 17