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/
让我们假设我有 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/