Raphael
Raphael

Reputation: 291

How to move back to the fragment from the activity

I have a tablayout with 5 frgaments. These fragments have buttons which starts an activity when clicked.

This is the screenshot

enter image description here

My challenge is going back to fragment on backpress. It either shows a white screen or forces the app to close.

This is the activity

public class OrderMenuActivity extends AppCompatActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_order_menu);
    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.container, new OrderMenuFragment());
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();
}

@Override
public void onBackPressed(){
    FragmentManager fm = getFragmentManager();
    if (fm.getBackStackEntryCount() > 0) {
        fm.popBackStack();
    } else {
        super.onBackPressed();
    }
}

@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}}

This is the activity with the tablayout

public class AgroInfoActivity extends AppCompatActivity {
private static final String TAG = "AgroInfoActivity";

private SectionsPageAdapter mSectionsPageAdapter;
@BindView(R.id.container)
ViewPager mViewPager;
@BindView(R.id.tabs)
TabLayout tabLayout;
@BindView(R.id.toolbar)
Toolbar toolbar;
@BindView(R.id.spinner_nav)
public Spinner cropsSpinner;

@OnItemSelected(R.id.spinner_nav)
void cropChanged(Spinner crops, int position) {
    for (int i = 0; i < listeners.size(); i++) {
        listeners.get(i).onItemSelected(cp.get(position));
    }
}


public ArrayList<String> cp = new ArrayList<>();

public interface OnCropperSpinnerSelectedListener {
    void onItemSelected(String pos);
}

List<OnCropperSpinnerSelectedListener> listeners = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_extension);
    ButterKnife.bind(this);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setTitle("");

    mSectionsPageAdapter = new SectionsPageAdapter(getFragmentManager());
    setupViewPager(mViewPager);

    tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
    tabLayout.setupWithViewPager(mViewPager);

    CouchdbCrops couchdbCrops = new CouchdbCrops(AgroInfoActivity.this);
    try {
        for (JsonObject j : couchdbCrops.allCrops()) {
            cp.add(j.get("crop").getAsString());
        }
    } catch (CouchbaseLiteException e) {

    }
    ArrayAdapter<String> adapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_spinner_item, cp);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    cropsSpinner.setAdapter(adapter);


}


@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}

private void setupViewPager(ViewPager viewPager) {
    SectionsPageAdapter adapter = new SectionsPageAdapter(getFragmentManager());

    adapter.addFragment(new AgroInfoDescFragment(),"Description");
    adapter.addFragment(new AgroInfoLandPFragment(),"Land Preparation");
    adapter.addFragment(new AgroInfoPlantFragment(),"Planting");
    adapter.addFragment(new AgroInfoMgtFragment(),"Management");
    adapter.addFragment(new AgroInfoHvFragment(),"Post Harvest");
    adapter.addFragment(new ExtVideosFragment(),"Videos");

    viewPager.setAdapter(adapter);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_extension, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

public void addCropperSpinnerSelectedListener(OnCropperSpinnerSelectedListener listener) {
    listeners.add(listener);
}

}

How best can I achieve this? Any help is highly appreciated

Upvotes: 1

Views: 670

Answers (2)

Poovarasan Selvaraj
Poovarasan Selvaraj

Reputation: 169

Just try this one,

Remove OnBackpressed() on all fragment classes,

then do onBackpressed() event on fragment implemented class, that is main class for fragments.

Upvotes: 0

Raphael
Raphael

Reputation: 291

I found the solution. I just called finish() on backpress

 @Override
public void onBackPressed(){
    finish();
}

And this solved my issue. The finish() calls the activity that holds the fragments

Upvotes: 2

Related Questions