片段未从另一个片段启动

时间:2018-09-03 21:34:23

标签: android

我有一个带有两个按钮的片段:btnEdit和btnExamen。 每个按钮都有一个OnClickListener。 这是代码:

btnEdit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mPref = getActivity().getSharedPreferences(MISDATOS, Context.MODE_PRIVATE);




                SharedPreferences.Editor editor = mPref.edit();

                editor.putString("id_empleo","No");
                editor.putString("id_grado","No");


                editor.apply();

                HomeFragment firstFragment = new HomeFragment();
                ((MainActivity)getActivity()).getSupportFragmentManager().beginTransaction()
                        .replace(R.id.frame, firstFragment).commit();

            }
        });

btnExamen.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Toast.makeText(getContext(), "Iniciando examen", Toast.LENGTH_SHORT).show();

                ExamenesFragment secondFragment = new ExamenesFragment();
                ((MainActivity)getActivity()).getSupportFragmentManager().beginTransaction()
                        .replace(R.id.frame, secondFragment).commit();
            }
        });

问题在于第一种方法可以正常工作,即启动HomeFragment。 但是第二种方法不是启动片段ExamFragment。敬酒开始了。

我看不出可能有问题的代码有什么区别。

1 个答案:

答案 0 :(得分:3)

用新的Fragment替换当前的Fragment,并将事务推送到Backstack。这样可以保留后退按钮的行为...

创建一个新的Activity确实打败了使用碎片的整个目的……反而会适得其反。

    btnEdit.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) { 
...
        // Create new fragment and transaction
        HomeFragment firstFragment = new HomeFragment(); 
        FragmentTransaction transaction = getFragmentManager().beginTransaction();

        // Replace whatever is in the frame view with this fragment,
        // and add the transaction to the back stack
        transaction.replace(R.id.frame, firstFragment );
        transaction.addToBackStack(null);

        // Commit the transaction
        transaction.commit();                  
                }
            });

    btnExamen.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    ...

        ExamenesFragment secondFragment= new ExamenesFragment(); 
        FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
        transaction.replace(R.id.frame, secondFragment);
        transaction.addToBackStack(null); 
        transaction.commit();                   
                }
            });