【问题标题】:Show White screen when going back through fragment?通过片段返回时显示白屏?
【发布时间】:2017-05-04 08:27:25
【问题描述】:

如果我按回主页片段然后显示白屏并在再次按应用程序完成后,我在 Container_activity Oncreate 方法中调用主页片段。我希望当我按回主页片段应用程序将关闭并且不显示空白屏幕.这是我的代码:-

public class Home_fragment extends Fragment {

    ViewFlipper viewFlipper;
    int[] images = {R.drawable.home_first, R.drawable.home_second, R.drawable.home_third};

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        final View view = inflater.inflate(R.layout.home_fragment, container, false);

        viewFlipper = (ViewFlipper) view.findViewById(R.id.simpleViewFlipper);
        for (int i = 0; i < images.length; i++) {
            ImageView imageView = new ImageView(getActivity());
            imageView.setImageResource(images[i]);
            viewFlipper.addView(imageView);
        }

        Animation in = AnimationUtils.loadAnimation(getActivity(), android.R.anim.slide_in_left);
        Animation out = AnimationUtils.loadAnimation(getActivity(), android.R.anim.slide_out_right);

        viewFlipper.setInAnimation(in);
        viewFlipper.setOutAnimation(out);
        viewFlipper.setFlipInterval(3000);
        viewFlipper.setAutoStart(true);
        return view;
    }
}

活动类:-

public class Container_Activity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

    FrameLayout frameLayout;
    static Container_Activity activity;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_container_);

        if (android.os.Build.VERSION.SDK_INT >= 21) {
            Window window = this.getWindow();

            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            window.setStatusBarColor(this.getResources().getColor(R.color.statusbarcolor));

        }
        activity = this;

        Container_Activity.showFragment(new Home_fragment(), "");

        frameLayout = (FrameLayout) findViewById(R.id.container_frame);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);


        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.setDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
    }

    @Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return false;
    }


    public static void showFragment(Fragment fragment, String Tag) {
        FragmentManager manager = activity.getSupportFragmentManager();
        FragmentTransaction transcation = manager.beginTransaction();
        transcation.replace(R.id.container_frame, fragment, Tag);
        transcation.addToBackStack(null);
        transcation.commit();

    }
}

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:

    编辑

    在添加主页片段时不要使用

    transcation.addToBackStack(null);
    

    对于 home 以外的片段,你可以使用

    transcation.addToBackStack(null);
    

    showFragment() 函数中删除以下行

     transcation.addToBackStack(null);
    

    【讨论】:

    • 如果我在按下任何片段时删除此行,应用程序将在每个片段中关闭,这就是我使用 addtoBackStack 的原因
    • 那么在添加主片段时不要使用addToBackStack(null)
    • 当我从主页片段按下返回时,我想显示 toast 或警报对话框以确认应用程序关闭。但问题是当我从任何片段按下时应用程序关闭。
    • 我的问题是如何设置条件“if(特定片段)”显示然后警报对话框显示关闭应用程序
    【解决方案2】:

    为您要求 transcation.add 而不是transcation.replace

    fragmentTransaction.add(int containerViewId, Fragment fragment, String tag)

    将片段添加到活动状态。这个片段可以选择 也将其视图(如果 Fragment.onCreateView 返回非空)放入 活动的容器视图。

    transcation.add(R.id.container_frame, fragment, Tag);
    

    阅读Difference between add(), replace()

    【讨论】:

    • @Navjot.jassal 你删除了吗? addToBackStack
    • 我没有删除
    • @Navjot.jassal addToBackStack (null) 在这里发挥枢轴规则。我试过了
    【解决方案3】:

    fragmentTransaction.addToBackStack() //不要在你的第一个片段中包含这个。//

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-20
      • 1970-01-01
      • 1970-01-01
      • 2019-12-15
      • 1970-01-01
      • 1970-01-01
      • 2014-10-13
      相关资源
      最近更新 更多