我有一个包含5个frgaments的tablayout。这些片段具有按钮,可在单击时启动活动。
这是截图
我的挑战是回归到背压片段。它显示白色屏幕或强制关闭应用程序。
这是活动
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;
}}
这是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);
}
}
我最好能做到这一点吗?任何帮助都非常感谢
答案 0 :(得分:2)
我找到了解决方案。我刚刚在背景上调用了finish()
@Override
public void onBackPressed(){
finish();
}
这解决了我的问题。 finish()调用包含片段的活动
答案 1 :(得分:0)
试试这个,
删除所有片段类的OnBackpressed(),
然后在片段实现的类上执行onBackpressed()事件,这是片段的主类。