Reputation: 291
I have a tablayout with 5 frgaments. These fragments have buttons which starts an activity when clicked.
This is the screenshot
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
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
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