如何从活动中移回片段

时间:2018-01-18 06:31:42

标签: android android-fragments onbackpressed

我有一个包含5个frgaments的tablayout。这些片段具有按钮,可在单击时启动活动。

这是截图

enter image description here

我的挑战是回归到背压片段。它显示白色屏幕或强制关闭应用程序。

这是活动

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);
}

}

我最好能做到这一点吗?任何帮助都非常感谢

2 个答案:

答案 0 :(得分:2)

我找到了解决方案。我刚刚在背景上调用了finish()

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

这解决了我的问题。 finish()调用包含片段的活动

答案 1 :(得分:0)

试试这个,

删除所有片段类的OnBackpressed(),

然后在片段实现的类上执行onBackpressed()事件,这是片段的主类。