android 片段在交易后不显示之前的位置

android fragment not showing the previous position after transaction

让我们假设我有 2 fragment a & b

片段 a 包含视图寻呼机、水平网格视图和按钮图像等滚动。 当我单击 Fragment a 中的一个项目时,它会转到 fragment b,当我单击 fragment b 中的后退按钮时,它会返回到 fragment 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();

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

实际上,两个片段合而为一 Activity 如果您从一个片段转移到另一个片段,它会替换之前的片段,这就是为什么您无法检索之前的片段,但如果您计算后退按钮位置并设置它,则有可能切换大小写,这样就可以了..

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

如果对你有帮助请告诉我

我明白你的问题。您可以使用

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 实例。

像下面的代码一样使用场景:

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/