OnBackPressed片段显示空白屏幕

时间:2014-03-06 10:30:35

标签: android android-intent android-fragments

我在我的Application.So中使用片段。我在主页上有一个5项目的网格视图,我将再次打开一个新片段。

所以正在发生的事情是在正在关闭应用程序之后显示一个空白屏幕。

请告诉我我在这方面做错了什么。

mycode的

gridView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> arg0, View v, int arg2,
                    long arg3) {
                if (DASHBOARD_LINKS[arg2].equals("A")) {
                    fragTran.replace(R.id.content_frame,
                                firstFrag);
                        fragTran.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                        fragTran.addToBackStack(null);
                        fragTran.commit();

                }
                if (DASHBOARD_LINKS[arg2].equals("B")) {
                    fragTran.replace(R.id.content_frame, secondFrag);
                    fragTran.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                    fragTran.addToBackStack(null);
                    fragTran.commit();
                }
                if (DASHBOARD_LINKS[arg2].equals("C")) {
                    fragTran.replace(R.id.content_frame, thirdFarg);
                    fragTran.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                    fragTran.addToBackStack(null);
                    fragTran.commit();
                }
            }
        });

请帮我解决这个问题

7 个答案:

答案 0 :(得分:12)

我的建议是让片段调用addToBackStack(null)

但删除此行  addToBackStack(null)

来自主页,onbackpress您将获得空白屏幕,希望这将为您服务。

答案 1 :(得分:3)

  

显示空白解决方案的片段。

  1. 确保在没有addToBackStack()方法的情况下添加第一个基本片段。因为它负责导航返回。我们不想从第一页回来。所以不要将它添加到backStack。
  2. 如果您拨打fragmentTransacation.add,则从片段A移动到片段B ,同时从B返回到A. onViewCreatedonResume方法不会在您添加片段时调用。因此,为了在返回片段A时点击onResumeonViewCreated,您应该调用fragmentTransaction.replace

答案 2 :(得分:1)

@Override
public void onBackPressed() {
    int fragments = getSupportFragmentManager().getBackStackEntryCount();
    if (fragments == 1) {
        finish();
    } else {
        if (getFragmentManager().getBackStackEntryCount() > 1) {
            getFragmentManager().popBackStack();
        } else {
            super.onBackPressed();
        }
    }
}

答案 3 :(得分:1)

addToBackStack()&lt; - 不要将此包含在您的第一个片段中.--&gt;

if(getSupportFragmentManager().getBackStackEntryCount() !=1){
                fragmentTransaction.addToBackStack("placeholder");
            }

答案 4 :(得分:1)

如果您将片段从一个活动导航到第二个活动的片段,则会发生这种情况。在替换你的片段时,你将它们添加到backstack中,所以不要将相应活动的第一个片段添加到backstack中。

答案 5 :(得分:0)

我假设您要处理后退按钮。您可以执行以下操作,

Fragments之间转换之前,请调用addToBackStack(),如下所示,

 fragTran.replace(R.id.content_frame, secondFrag);
                    fragTran.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                    fragTran.addToBackStack("TAG");
                    fragTran.commit();

有关详细信息,请参阅此帖https://stackoverflow.com/a/7992472/1665507

答案 6 :(得分:0)

更新您的OncreateView()方法:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    if (view != null) {
    if (view.getParent() != null) {
        ((ViewGroup)view.getParent()).removeView(view);
    }
    return view;
}

View v=inflater.inflate(R.layout.tests, container, false);

希望这会有所帮助!