1

让我们考虑一下我有 2fragment a & b

片段 a 包含视图寻呼机、水平网格视图和带有滚动的按钮图像等。当我点击其中的一个项目时 ,当我点击后退按钮时,它又Fragment a回到. 一切工作完美。fragment bfragment bfragment a

我的问题是在后按,它从头开始fragment b加载。fragment a我想显示fragment a交易开始的确切位置(比如底部)。

我正在每个项目的适配器中进行所有片段事务,代码如下所示。

Bundle arguments = new Bundle(); 
Fragment fragment = null; 
MyClass cls= (MyClass ) obj.get(position); 
arguments.putParcelable("single", offer); 
// Start a new fragment 
fragment = new DetailFragment(); 
fragment.setArguments(arguments); 
FragmentTransaction transaction = activity .getSupportFragmentManager().beginTransaction(); 
transaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right); 
transaction.replace(R.id.content_page_frame, fragment, OfferZoneDetailFragment.ARG_ITEM_ID); 
transaction.addToBackStack(DetailFragment.ARG_ITEM_ID); 
transaction.commit();

从其他片段返回时如何加载片段事务开始位置。

4

2 回答 2

2

我理解你的问题。您可以使用

transaction.add(R.id.content_page_frame, fragment, OfferZoneDetailFragment.ARG_ITEM_ID); 

代替

transaction.replace(R.id.content_page_frame, fragment, OfferZoneDetailFragment.ARG_ITEM_ID); 

可能是,如果它不能解决您的问题,那么使用以下机制,它将解决您的问题:-

检查您的片段是否已经在您的堆栈中,然后附加已经存在的片段。

否则添加新的 Frament 实例。

像这样使用 sacenario 代码:

android.support.v4.app.FragmentManager fm =   getSupportFragmentManager();
                AndroidFragment androidFragment = (AndroidFragment) fm.findFragmentByTag("android");
                AppleFragment appleFragment = (AppleFragment) fm.findFragmentByTag("apple");
                android.support.v4.app.FragmentTransaction ft = fm.beginTransaction();

                /** Detaches the androidfragment if exists */
                if(androidFragment!=null)
                    ft.detach(androidFragment);

                /** Detaches the applefragment if exists */
                if(appleFragment!=null)
                    ft.detach(appleFragment);

                /** If current tab is android */
                if(tabId.equalsIgnoreCase("android")){

                    if(androidFragment==null){
                        /** Create AndroidFragment and adding to fragmenttransaction */
                        ft.add(R.id.realtabcontent,new AndroidFragment(), "android");
                    }else{
                        /** Bring to the front, if already exists in the fragmenttransaction */
                        ft.attach(androidFragment);
                    }

                }else{    /** If current tab is apple */
                    if(appleFragment==null){
                        /** Create AppleFragment and adding to fragmenttransaction */
                        ft.add(R.id.realtabcontent,new AppleFragment(), "apple");
                     }else{
                        /** Bring to the front, if already exists in the fragmenttransaction */
                        ft.attach(appleFragment);
                    }
                }
                ft.commit();

编辑 :

transaction.add 将在 backpress 上显示上一个片段,并且不会经历片段生命周期

有关参考,请参阅此 onTabChanged:http ://wptrafficanalyzer.in/blog/creating-navigation-tabs-using-tabhost-and-fragments-in-android/

于 2015-09-22T06:13:10.767 回答
-1

实际上,如果您从一个片段转移到另一个片段中的两个片段,它已经替换了前一个片段,这就是您无法检索前一个片段的原因,但是如果您倒数按钮位置并将其设置为 switch-case 则可能是可能的..

@Override
public void onBackPressed()
{
   super.onBackPressed();
   switch(pager.getselecteditem())
case 0:
exit();
break;
case:1
pager.setselecteditem(pager.getselecteditem()-1);
break;
}

让我知道它是否对您有帮助

于 2015-09-22T05:51:02.503 回答