1

我有, Fragment A其中包含listView - 当用户单击一个项目时,当前视图将被另一个视图替换,该视图也包含一个名为Fragment B.

Fragment A -> B,我设法将 Fragment A 添加到 backstack 中,所以当用户进入时Fragment B,如果他按下后退按钮,它将返回到Fragment A. 问题是在我再次按下Fragment AlistView)之后,它只会显示一个银行屏幕,我希望它Fragment B应该再次显示。

片段 A

      lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {


                //FragmentActivity  activity =  getActivity();

                    String fragMainGroups = "mainGroups";

                    Fragment videoFragment = new VideoPlayerFragment();
                    FragmentTransaction transaction = getFragmentManager().beginTransaction();
                    transaction.replace(R.id.contentFragment, videoFragment, fragMainGroups );
                    transaction.addToBackStack(fragMainGroups);
                    transaction.commit(); 

            }
        });

编辑

                String fragMainGroups = "mainGroups";
            String Groups = "Groups";

                Fragment fragment1 = new VideoPlayerFragment();


                /*FragmentTransaction transaction = getFragmentManager().beginTransaction();
                transaction.replace(R.id.contentFragment, fragment1, fragMainGroups );
                transaction.addToBackStack(fragMainGroups);
                transaction.commit(); */

                FragmentTransaction ft = getFragmentManager().beginTransaction();
                ft.addToBackStack(Groups);
                ft.add(R.id.contentFragment, fragment1, fragMainGroups);
                ft.commit();
4

2 回答 2

0

这个怎么样 ?

    transaction.add(R.id.contentFragment, videoFragment, fragMainGroups );

额外提醒:

你最好使用getSupportFragmentManager,这样兼容性会更好。

于 2013-07-22T06:43:13.533 回答
0

除非您的活动托管大量片段,否则最好通过您的活动处理后退按钮按下。当您在片段内按下后退按钮时,您的活动的 onBackPressed() 方法将被调用,该方法可以被覆盖和处理..所以在您的情况下可以通过这种方式处理片段的后退按钮..您可以相应地更新它

主要活动

     public static boolean isMainActivityShown ;
     public static boolean isFragment1FromMainActivity=false ;
     public static boolean isFragment1FromFragment2=false ;
     public static boolean isFragment2Shown=false ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        isMainActivityShown=true  //inside onCreate method put isMainActivityShown true
. 
. 
.
}
.
.
Fragment currentFragment = new Fragment1();
isMainActivityShown=false;   //when moving to fragment1 
isFragment1FromMainActivity=true;
frgManager = getFragmentManager();
frgManager.beginTransaction().replace(R.id.content_frame, currentFragment)
                                        .commit();
     @Override
        public void onBackPressed() {

            if(isMainActivityShown)
            {
                finish();
            }
            else if(isFragment1FromMainActivity)
            {
            isMainActivityShown=true;
            isFragment1FromMainActivity=false;
               //write the code to move to MainActvity
            }
           else if(isFragment1FromFragment2)
            {
               //Code to move back to Fragment2 
          Fragment currentFragment = new Fragment2();
                isFragment2Shown=true;
               isFragment1FromFragment2=false;

                FragmentManager frgManager;
                frgManager = getFragmentManager();
                frgManager.beginTransaction().replace(R.id.content_frame, currentFragment)
                        .commit();
            }
           else if(isFragment2Shown)
            {  //When you are in Fragment 2 pressing back button will move to fragment1
                Fragment currentFragment = new Fragment1();
                isFragment2Shown=false;
               isFragment1FromFragment2=true;

                FragmentManager frgManager;
                frgManager = getFragmentManager();
                frgManager.beginTransaction().replace(R.id.content_frame, currentFragment)
                        .commit();
            }

            }

片段1

Fragment currentFragment = new Fragment2();

MainActivity.isFragment1FromMainActivity=false;

MainActivity.isFragment2Shown=true;
frgManager = getFragmentManager();
frgManager.beginTransaction().replace(R.id.content_frame, currentFragment)
                                    .commit();
于 2015-01-18T14:15:45.220 回答