0

Будут считать, что у меня есть 2 fragment a & bандроид фрагмент не показывает предыдущую позиции после операции

фрагмент в содержит вид пейджер, горизонтальный вид сетки и кнопки изображение и т.д. с свитком. Когда я нажимаю элемент в 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(); 

Как загрузить начальную позицию транзакции фрагмента при возврате из другого фрагмента.

+0

Это зависит от точного типа элемента, который вы хотите показать/сохранить позицию, посмотрите: http: //stackoverflow.com/questions/15678489/best-way-save-restore-textview-position-in-scrollview & http://stackoverflow.com/questions/29208086/save-the-position-of-scrollview-when- the-orientation-changes & http://stackoverflow.com/questions/8619794/maintain-scroll-position-of-gridview-through-screen-rotation & http://stackoverflow.com/questions/3014089/maintain-save-restore-scroll-position -when-return-to-a-listview –

+0

@MovsarBekaev, как я могу точно знать позицию по типу?, вся ссылка говорит о списке и сетке, я спрашиваю о фрагменте с 5 сеткой и 1 списком – Sree

+0

Я исправил ссылки , Вы говорите, что вы хотите сохранить положение области обзора во время переключения фрагментов, не так ли?Если это так, вам нужно иметь дело с этими элементами в ваших фрагментах, а не с самими фрагментами, насколько я знаю, вы могли бы это сделать, сохранив положение в Bundle или статическом var или где-нибудь еще при переключении и вызове некоторого метода восстановления при переключении наоборот. –

ответ

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); 

Может быть, если бы не решить вашу проблему, то используйте следующий механизм, он будет решить вашу проблему: -

Проверьте, если ваш фрагмент уже в вашем стеке добавьте уже существующий фрагмент.

еще добавить новый instense of 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(); 

EDIT:

transaction.add покажет предыдущий фрагмент на backpress и не будет проходить через фрагмент жизненного цикла

ориентировочные увидеть это onTabChanged: http://wptrafficanalyzer.in/blog/creating-navigation-tabs-using-tabhost-and-fragments-in-android/

+0

yes transaction.add работать для меня, спасибо alot – Sree

+0

Yo приветствуются @Sree –

+0

@Sree, это отличный ответ, я не думал, что attach/detach сохраняет состояние, но в этом случае, как насчет методов transaction.show() и .hide(), можете ли вы их проверить? Я имею в виду просто показывать один и скрывать другого, если это работает, было бы лучше для производительности, а затем прикрепления и отсоединения. –

-1

Фактически Оба фрагмента в одном действии, если вы переходите от одного фрагмента к другому, он заменяет предыдущий фрагмент, поэтому вы не можете извлечь предыдущий фрагмент, но это возможно, если вы отсчитываете позицию кнопки и устанавливаете ее в случай переключения это может быть возможно ..

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

Позвольте мне знать, если это поможет вам

+0

, как это можно сделать?/ – Sree