无法正确地将片段返回到上一个片段

时间:2015-10-21 06:38:58

标签: android

已回答: 我在Fragment A中有一个仍然关注片段B后面的搜索视图,所以第一次背压是清除焦点,让第二次背压做我所做的事情认为它应该。感谢您的帮助,对于我原先发布的信息道歉并不足以帮助我找到解决问题的方法。

问题 我遇到了一个问题,当我添加并提交一个新片段时,它需要按两个后退按钮才能返回上一个视图。

注意:这只发生在您选择的第一个项目上,一旦您成功退回到包含列表视图的片段并再次选择该对象,或者只需要按下后退按钮的新对象一次。

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapter, View v, int position, long arg3) {
            final Obj item = (obj) adapter.getItemAtPosition(position);
            Bundle b = new Bundle();
            b.putParcelable("obj", item);
            Fragment fragment = new ObjFragment();
            fragment.setArguments(b);
            getFragmentManager().beginTransaction().add(android.R.id.content, fragment).addToBackStack(null).commit();
        }
    });

当我选择一个对象时,我有一个对象的列表视图,一个新的片段被启动,片段里面没有任何花哨的东西,只是填充了一些信息文本框等。

我已经检查过它是否可能启动了两个片段,所以我可能需要退出两次以关闭并返回到前一个片段,但事实并非如此。

我也尝试在我的活动中覆盖onBackPressed方法,并且仅在按下第二个后退按钮后调用它,我不确定这意味着什么。欢迎提出任何建议,这可能非常简单,我只是忽略了。

这是在我的MainActivity中,它包含3个标签形式的片段,我正在处理tab3,其中包含了listview的上述监听器。

private ViewPager mViewPager;
private SlidingTabLayout tabs;
private CharSequence Titles[] = {"Recent", "Library", "All"};
private int Numbtabs = 3;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    // Create the adapter that will return a fragment for each of the three
    // primary sections of the activity.
    mViewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager(), Titles, Numbtabs);
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mViewPagerAdapter);
    mViewPager.setOffscreenPageLimit(3);


    tabs = (SlidingTabLayout) findViewById(R.id.tabs);
    tabs.setDistributeEvenly(true); // To make the Tabs Fixed set this true, This makes the tabs Space Evenly in Available width


    // Setting the ViewPager For the SlidingTabsLayout
    tabs.setViewPager(mViewPager);


}

//trying to solve double back button to exit objfragment
@Override
public void onBackPressed() {
    if (getSupportFragmentManager().getBackStackEntryCount() > 0){
        getSupportFragmentManager().popBackStack();
    }
    else{
        super.onBackPressed();
    }
}

已回答: 我在Fragment A中有一个仍然关注片段B后面的搜索视图,所以第一次背压是清除焦点,让第二次背压做我所做的事情认为它应该。感谢您的帮助,对于我原先发布的信息道歉并不足以帮助我找到解决问题的方法。

2 个答案:

答案 0 :(得分:0)

you can do something like this in your code

//Click of the Item
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapter, View v, int position, long arg3) {
            final Obj item = (obj) adapter.getItemAtPosition(position);
            Bundle b = new Bundle();
            b.putParcelable("obj", item);
            Fragment fragment = new ObjFragment();
            fragment.setArguments(b);
            getFragmentManager().beginTransaction().add(android.R.id.content, fragment).addToBackStack("ObjFragment").commit();
        }
    });

//Backpress code
FragmentManager fragmentManager = getFragmentManager();
                    try {
                        fragmentManager.popBackStack();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

答案 1 :(得分:0)

回答:我在Fragment A中有一个仍然关注片段B后面的搜索视图,所以第一个背压是清除焦点,让第二个背压做我认为应该做的事情。感谢您的帮助,对于我原先发布的信息并不足以帮助我找到解决问题的方法,我深表歉意。