it-swarm.com.ru

Как получить отображаемый фрагмент?

Я играю с фрагментами в Android.

Я знаю, что могу изменить фрагмент, используя следующий код:

FragmentManager fragMgr = getSupportFragmentManager();
FragmentTransaction fragTrans = fragMgr.beginTransaction();

MyFragment myFragment = new MyFragment(); //my custom fragment

fragTrans.replace(Android.R.id.content, myFragment);
fragTrans.addToBackStack(null);
fragTrans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
fragTrans.commit();

У меня вопрос в файле Java, как я могу получить отображаемый в данный момент экземпляр фрагмента?

369
Leem.fin

Когда вы добавляете фрагмент в вашу транзакцию, вы должны использовать тег.

fragTrans.replace(Android.R.id.content, myFragment, "MY_FRAGMENT");

... и позже, если вы хотите проверить, виден ли фрагмент:

MyFragment myFragment = (MyFragment)getFragmentManager().findFragmentByTag("MY_FRAGMENT");
if (myFragment != null && myFragment.isVisible()) {
   // add your code here
}

Смотрите также http://developer.Android.com/reference/Android/app/Fragment.html

416
ramdroid

Я знаю, что это старый пост, но раньше у него тоже были проблемы. Нашел решение, которое должно было сделать это в функции прослушивания onBackStackChanged()

  @Override
    public void onBackPressed() {
        super.onBackPressed();

         Fragment f = getActivity().getFragmentManager().findFragmentById(R.id.fragment_container);
      if(f instanceof CustomFragmentClass) 
        // do something with f
        ((CustomFragmentClass) f).doSomething();

    }

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

348
Sev

Вот мое решение, которое я считаю удобным для сценариев с малым количеством фрагментов.

public Fragment getVisibleFragment(){
    FragmentManager fragmentManager = MainActivity.this.getSupportFragmentManager();
    List<Fragment> fragments = fragmentManager.getFragments();
    if(fragments != null){
        for(Fragment fragment : fragments){
            if(fragment != null && fragment.isVisible())
                return fragment;
        }
    }
    return null;
}
133
Matt Mombrea

Каждый раз, когда вы показываете фрагмент, вы должны поместить его в backstack:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_ENTER_MASK);       
ft.add(R.id.primaryLayout, fragment, tag);
ft.addToBackStack(tag);
ft.commit();        

И тогда, когда вам нужно получить текущий фрагмент, вы можете использовать этот метод:

public BaseFragment getActiveFragment() {
    if (getSupportFragmentManager().getBackStackEntryCount() == 0) {
        return null;
    }
    String tag = getSupportFragmentManager().getBackStackEntryAt(getSupportFragmentManager().getBackStackEntryCount() - 1).getName();
    return (BaseFragment) getSupportFragmentManager().findFragmentByTag(tag);
}
74
Dmitry_L

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

    FragmentManager fragManager = this.getSupportFragmentManager();
    int count = this.getSupportFragmentManager().getBackStackEntryCount();
    Fragment frag = fragManager.getFragments().get(count>0?count-1:count);
21
tainy

реактивный путь:

Observable.from(getSupportFragmentManager().getFragments())
    .filter(fragment -> fragment.isVisible())
    .subscribe(fragment1 -> {
        // Do something with it
    }, throwable1 -> {
        // 
    });
14
localhost

Мой метод основан на try/catch следующим образом:

MyFragment viewer = null;
try {
    viewer = (MyFragment) getFragmentManager().findFragmentByTag(MY_TAG_FRAGMENT);
} catch (ClassCastException e) {
    // not that fragment
}

Но может быть лучше ...

10
Thordax

Это немного поздно, но для тех, кто заинтересован: Если вы знаете индекс нужного вам фрагмента во FragmentManager, просто получите ссылку на него и проверьте функцию isMenuVisible ()! Вот :

getSupportFragmentManager().getFragments().get(0).isMenuVisible()

Если true Его видно пользователю и так далее!

7
MohammadReza

Ну, этот вопрос получил много взглядов и внимания, но все еще не содержал Самое простое решение с моей стороны - использовать getFragments ().

            List fragments = getSupportFragmentManager().getFragments();
            mCurrentFragment = fragments.get(fragments.size() - 1);
7
Nativ

1)

ft.replace(R.id.content_frame, fragment, **tag**).commit();

2)

FragmentManager fragmentManager = getSupportFragmentManager();
Fragment currentFragment = fragmentManager.findFragmentById(R.id.content_frame);

3)

if (currentFragment.getTag().equals(**"Fragment_Main"**))
{
 //Do something
}
else
if (currentFragment.getTag().equals(**"Fragment_DM"**))
{
//Do something
}
6
Nam Ngo Thanh

В SupportFragmentManager есть метод с именем findFragmentById(). Я использую его в контейнере активности, как: 

public Fragment currentFragment(){
    return getSupportFragmentManager().findFragmentById(R.id.activity_newsfeed_frame);
}

Вот как получить ваш текущий Fragment. Если у вас есть пользовательский Fragment и вам нужно проверить, что это Fragment, я обычно использую instanceof:

if (currentFragment() instanceof MyFrag){
    // Do something here
}
5
Kevin Murvie

Вдохновленный ответом Tainy , вот мои два цента. Немного изменен от большинства других реализаций.

private Fragment getCurrentFragment() {
    FragmentManager fragmentManager = myActivity.getSupportFragmentManager();
    int stackCount = fragmentManager.getBackStackEntryCount();
    if( fragmentManager.getFragments() != null ) return fragmentManager.getFragments().get( stackCount > 0 ? stackCount-1 : stackCount );
    else return null;
}

Замените "myActivity" на «this», если это ваша текущая деятельность, или используйте ссылку на вашу деятельность.

5
Nashe

Ответ Сева работает, когда вы нажимаете кнопку «Назад» или иным образом меняете бэкстек.

Я сделал что-то немного другое, хотя. У меня есть настройка прослушивателя изменений обратного стека на базовом фрагменте и его производных фрагментах, и этот код находится в прослушивателе:

Fragment f = getActivity().getSupportFragmentManager().findFragmentById(R.id.container);

if (f.getClass().equals(getClass())) {
    // On back button, or popBackStack(),
    // the fragment that's becoming visible executes here,
    // but not the one being popped, or others on the back stack

    // So, for my case, I can change action bar bg color per fragment
}
4
MCLLC

Это простой способ получить текущий фрагмент.

getFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
  @Override public void onBackStackChanged() {
    currentFragment = fragmentManager.findFragmentById(R.id.content);
    if (currentFragment !=  null && (currentFragment instanceof LoginScreenFragment)) {
      logout.setVisibility(View.GONE);
    } else {
      logout.setVisibility(View.VISIBLE);
    }
  }
});
4
lallu Sukendh

Вы можете запросить, какой фрагмент загружен в ваш фрейм содержимого Activity, и получить класс фрагмента или фрагмент «простое имя» (в виде строки).

public String getCurrentFragment(){
     return activity.getSupportFragmentManager().findFragmentById(R.id.content_frame).getClass().getSimpleName();
}

Использование: 

Log.d(TAG, getCurrentFragment());

Результаты:

D/MainActivity: FragOne
4
Mr L

Это работа для меня. Надеюсь, это кому-нибудь поможет.

FragmentManager fragmentManager = this.getSupportFragmentManager();  
        String tag = fragmentManager
                    .getBackStackEntryAt(
                    fragmentManager
                    .getBackStackEntryCount() - 1)
                    .getName();
              Log.d("This is your Top Fragment name: ", ""+tag);
3
Cüneyt

Если попасть сюда и вы используете Kotlin:

var fragment = supportFragmentManager.findFragmentById(R.id.fragment_container)

R.id.fragment_container - это id, где fragment присутствует в их activity

Или, если вы хотите более хорошее решение:

supportFragmentManager.findFragmentById(R.id.content_main)?.let {
    // the fragment exists

    if (it is FooFragment) {
        // The presented fragment is FooFragment type
    }
}
3
pableiros

Если вы получаете текущий экземпляр Fragment от родительского действия, вы можете просто

findFragmentByID(R.id.container);

Это на самом деле получить текущий экземпляр фрагмента, который заполняется в представлении. Я была такая же проблема. Я должен был загрузить один и тот же фрагмент дважды, оставив один на backstack. 

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

findFragmentByTag()
3
Yasin Yaqoobi
final FragmentManager fm=this.getSupportFragmentManager();
final Fragment fragment=fm.findFragmentByTag("MY_FRAGMENT");

if(fragment != null && fragment.isVisible()){
      Log.i("TAG","my fragment is visible");
}
else{
      Log.i("TAG","my fragment is not visible");
}
2
KeranMarinov

Оформить заказ на это решение. Это помогло мне получить текущий фрагмент. 

if(getSupportFragmentManager().getBackStackEntryCount() > 0){
        Android.support.v4.app.Fragment f = 
         getSupportFragmentManager().findFragmentById(R.id.fragment_container);
        if(f instanceof ProfileFragment){
            Log.d(TAG, "Profile Fragment");
        }else if(f instanceof SavedLocationsFragment){
            Log.d(TAG, "SavedLocations Fragment");
        }else if(f instanceof AddLocationFragment){
            Log.d(TAG, "Add Locations Fragment");
        }
2
Haroon khan

Я столкнулся с подобной проблемой, когда я хотел узнать, какой фрагмент отображался в последний раз при нажатии клавиши «назад». Я использовал очень простое решение, которое сработало для меня. Каждый раз, когда я открываю фрагмент, в методе onCreate () я устанавливаю переменную в моем синглтоне (замените «myFragment» именем вашего фрагмента)

MySingleton.currentFragment = myFragment.class;

Переменная объявлена ​​в синглтоне как 

public static Class currentFragment = null; 

Потом в onBackPressed () проверяю

    if (MySingleton.currentFragment == myFragment.class){
        // do something
        return;
    }
    super.onBackPressed();

Обязательно вызовите super.onBackPressed (); после «возврата», в противном случае приложение обработает клавишу возврата, что в моем случае привело к завершению работы приложения.

1
Zvi

В случае прокручиваемых фрагментов, когда вы используете экземпляр класса ViewPager, предположите mVeiwPager, вы можете вызвать mViewPager.getCurrentItem () для получения текущего номера int фрагмента.

в MainLayout.xml

<?xml version="1.0" encoding="utf-8"?>
<Android.support.design.widget.CoordinatorLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:fitsSystemWindows="true"
    Android:orientation="vertical"
    tools:context="unidesign.photo360.MainActivity">

    <Android.support.design.widget.AppBarLayout
        Android:id="@+id/appbar"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:fitsSystemWindows="false"
        Android:theme="@style/AppTheme.AppBarOverlay"
        app:expanded="false">

        <Android.support.v7.widget.Toolbar
            Android:id="@+id/main_activity_toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:layout_weight="1"
            app:popupTheme="@style/AppTheme.PopupOverlay"
            app:title="@string/app_name">

        </Android.support.v7.widget.Toolbar>

    </Android.support.design.widget.AppBarLayout>


    <Android.support.v4.view.ViewPager
        Android:id="@+id/view_pager"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content">

    </Android.support.v4.view.ViewPager>
    
</Android.support.design.widget.CoordinatorLayout>

в MainActivity.kt

class MainActivity : AppCompatActivity() {
    
        lateinit var mViewPager: ViewPager
        lateinit var pageAdapter: PageAdapter
        
//      ...
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            
            pageAdapter = PageAdapter(supportFragmentManager)
            mViewPager = findViewById(R.id.view_pager)
//          ...
            }
            
        override fun onResume() {
          super.onResume()
          var currentFragment = pageAdapter.getItem(mViewPager.currentItem)
//         ...
          }

1
Andrei Radchenko

Котлин путь;

val currentFragment = supportFragmentManager.fragments.last()
1
Cafer Mert Ceyhan

В основном упражнении метод onAttachFragment (фрагмент фрагмента) вызывается, когда к действию присоединяется новый фрагмент. В этом методе вы можете получить экземпляр текущего фрагмента. Однако метод onAttachFragment не вызывается, когда фрагмент извлекается из стека назад, т. Е. Когда нажимается кнопка «Назад», чтобы получить верхний фрагмент поверх стека. Я все еще ищу метод обратного вызова, который запускается в основном действии, когда фрагмент становится видимым внутри действия.

1
ufdeveloper

Я тоже застрял в этом вопросе. Что я наконец-то сделал, просто объявил массив фрагментов:

private static PlaceholderFragment[] arrFrg;

(в моем случае это PlaceholderFragment) и упаковал все эти Fragemnts в этот массив без тегов :)

        public static PlaceholderFragment newInstance(int sectionNumber) {
            final PlaceholderFragment fragment = new PlaceholderFragment();
            Bundle args = new Bundle();
            args.putInt(ARG_SECTION_NUMBER, sectionNumber);
            fragment.setArguments(args);
            arrFrg[sectionNumber] = fragment;

            return fragment;
}

Затем вы можете легко получить доступ к отображаемому фрагменту:

arrFrg[mViewPager.getCurrentItem()];

Я понимаю, что это, вероятно, не лучшее решение, но оно отлично работает для меня :)

0
MTU
public Fragment getVisibleFragment() {
    FragmentManager fragmentManager = getSupportFragmentManager();
    List<Fragment> fragments = fragmentManager.getFragments();
    if(fragments != null) {
        for (Fragment fragment : fragments) {
            if (fragment != null && fragment.isVisible())
                return fragment;
        }
    }
    return null;
}

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

Возвращаемый фрагмент можно сравнить с фрагментом, который вы хотите поместить в стек.

0
caesiium

Вы можете получить текущий фрагмент, используя следующий код

FragmentClass f = (FragmentClass)viewPager.getAdapter().instantiateItem(viewPager, viewPager.getCurrentItem());
0
Devendra Kulkarni

В случае, если у вас есть вложенные фрагменты, такие как видовые пейджеры внутри видовых пейджеров и т.д., и вы хотите получить все вложенные фрагменты.

Спасибо и вежливость Мэтт Момбреа ответ немного подправил версию.

private List<Fragment> getVisibleFragments(List<Fragment> searchFragments, List<Fragment> visibleFragments) {
    if (searchFragments != null && searchFragments.size() > 0) {
        for (Fragment fragment : searchFragments) {
            List<Fragment> nestedFragments = new ArrayList<>();
            List<Fragment> childFMFragments = fragment.getChildFragmentManager().getFragments();
            List<Fragment> fmFragments = fragment.getFragmentManager().getFragments();
            fmFragments.retainAll(childFMFragments);
            nestedFragments.addAll(childFMFragments);
            nestedFragments.addAll(fmFragments);
            getVisibleFragments(nestedFragments, visibleFragments);
            if (fragment != null && fragment.isVisible()) {
                visibleFragments.add(fragment);
            }
        }
    }
    return visibleFragments;
}

И вот использование:

List<Fragment> allVisibleFragments = getVisibleFragments(searchFragments, visibleFragments);

Например:

List<Fragment> visibleFragments = new ArrayList<>();
List<Fragment> searchFragments = MainActivity.this.getSupportFragmentManager().getFragments();
Toast.makeText(this, ""+getVisibleFragments(searchFragments, visibleFragments), Toast.LENGTH_LONG).show();
0
10101101

Если вы используете библиотеку поддержки версии 13, тогда эта проблема устранена, и вы должны просто переопределить:

@Override
public void setUserVisibleHint(boolean isVisibleToUser)
{
    // TODO Auto-generated method stub
    super.setUserVisibleHint(isVisibleToUser);
}

Дело в том, что вы не можете смешать два, потому что фрагмент не совместим с классом фрагмента версии 4.

Если это не так и вы используете библиотеку поддержки V4, переопределите метод setPrimaryItem для вашего FragmentStatePagerAdapter.

Я использовал это, чтобы обновить заголовок Actionbat в больших списках.

0
Mashiah

Немного странно, но я посмотрел на FragmentManager $ FragmentManagerImpl и у меня работает следующее:

public static Fragment getActiveFragment(Activity activity, int index)
{
    Bundle bundle = new Bundle();
    String key = "i";
    bundle.putInt(key,index);
    Fragment fragment=null;
    try
    {
        fragment = activity.getFragmentManager().getFragment(bundle, key);
    } catch(Exception e){}
    return fragment;
}

чтобы получить первый активный фрагмент, используйте 0 в качестве индекса

0
Hans

Использование шины событий (например, Otto , EventBus или RxJava Bus ) особенно удобно в таких ситуациях.

Хотя этот подход не обязательно передает вам видимый в данный момент фрагмент как объект (хотя это тоже можно сделать, но это приводит к более длинной цепочке вызовов), он позволяет вам выполнять действия с видимым в данный момент фрагментом (который обычно является тем, что вы хочу сделать зная на данный момент видимый фрагмент).

  1. убедитесь, что вы соблюдаете жизненный цикл фрагмента и зарегистрируйте/отмените регистрацию шины событий в соответствующее время
  2. в точке, где вам нужно знать видимый в данный момент фрагмент и выполнить набор действий. снимать событие на автобусе.

все видимые фрагменты, зарегистрированные на шине, выполнят необходимое действие.

0
Kaushik Gopal

Здравствуйте, я знаю, что это очень старая проблема, но я хотел бы поделиться своим собственным решением ..

Чтобы получить список просмотренных фрагментов пользователем, я создал вспомогательный класс:

public class MyHelperClass{

    private static ArrayList<Fragment> listFragment = new ArrayList<>();

    public static void addFragment(Fragment f){
        if(!existFragment(f)) {
            listFragment.add(f);
        }
    }
    public static void removeFragment(){
        if(listFragment.size()>0)
            listFragment.remove(listFragment.size()-1);
    }
    public static Fragment getCurrentFragment(){
        return listFragment.get(listFragment.size()-1);
    }
    public static int sizeFragments(){
        return listFragment.size();
    }
    private static Boolean existFragment(Fragment f){
        Boolean ret = false;
        for(Fragment fragment : listFragment){
            if (fragment.getClass() == f.getClass()){
                ret = true;
            }
        }
        return ret;
    }

И в основной деятельности я переопределить метод onAttachFragment

@Override
public void onAttachFragment(Fragment f) {
    super.onAttachFragment(f);

    MyHelperClass.addFragment(f);
}

а также я переопределяю метод onBackPressed:

@Override
public void onBackPressed() {
        General.removeFragment();
        if(General.sizeFragments()>0){
            Fragment fragment = null;
            Class fragmentClass = General.getCurrentFragment().getClass();

            try {
                fragment = (Fragment) fragmentClass.newInstance();
                fragment.setArguments(General.getCurrentFragment().getArguments());
            } catch (Exception e) {
                e.printStackTrace();
            }

            fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit();
        }else{
            super.onBackPressed();
        }
}

таким образом, вы в любой момент можете получить активный фрагмент с помощью MyHelperClass.getCurrentFragment ()

Я надеюсь, что это будет полезно для всех

с уважением

0
Ruben Flores

Вы можете добавить переменную класса selectedFragment, и каждый раз, когда вы изменяете фрагмент, вы обновляете переменную.

public Fragment selectedFragment;
public void changeFragment(Fragment newFragment){
    FragmentManager fragMgr = getSupportFragmentManager();
    FragmentTransaction fragTrans = fragMgr.beginTransaction();
    fragTrans.replace(Android.R.id.content, newFragment);
    fragTrans.addToBackStack(null);
    fragTrans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    fragTrans.commit();
    //here you update the variable
    selectedFragment = newFragment;
}

тогда вы можете использовать selectedFragment где угодно

0
whd.nsr

Может быть, самый простой способ это:

public MyFragment getVisibleFragment(){
    FragmentManager fragmentManager = MainActivity.this.getSupportFragmentManager();
    List<Fragment> fragments = fragmentManager.getFragments();
    for(Fragment fragment : fragments){
        if(fragment != null && fragment.getUserVisibleHint())
            return (MyFragment)fragment;
    }
    return null;
}

У меня сработало

0
madx

Я должен был сделать это совсем недавно, и ни один из ответов здесь действительно не подходил для этого сценария.

Если вы уверены, что будет виден только один фрагмент (в полноэкранном режиме), так что действительно хотите найти то, что находится на вершине backstack. Например, в качестве Kotlin для Fragment:

import androidx.fragment.app.Fragment

fun Fragment.setVisibilityChangeListener(clazz: Class<out Fragment>, listener: (Boolean) -> Unit) {
    fragmentManager?.run {
        addOnBackStackChangedListener {
            val topFragmentTag = getBackStackEntryAt(backStackEntryCount - 1).name
            val topFragment = findFragmentByTag(topFragmentTag)
            listener(topFragment != null && topFragment::class.Java == clazz)
        }
    }
}

И используйте это как:

class MyFragment: Fragment {
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        setVisibilityChangeListener(this::class.Java) { visible -> 
            // Do stuff
        }
    }
}
0
Mikel Pascual

Я нашел findFragmentByTag не так удобно. Если у вас есть String currentFragmentTag в вашем Activity или родительском Fragment, вам нужно сохранить его в onSaveInstanceState и восстановить его в onCreate. Даже если вы это сделаете, при воссоздании Activity, onAttachFragment будет вызываться раньше, чем onCreate, поэтому вы не можете использовать currentFragmentTag в onAttachFragment (например, обновить некоторые представления, основанные на currentFragmentTag), потому что он может еще не быть восстановлен.

Я использую следующий код:

Fragment getCurrentFragment() {
    List<Fragment> fragments = getSupportFragmentManager().getFragments();
    if(fragments.isEmpty()) {
        return null;
    }
    return fragments.get(fragments.size()-1);
}

В документе FragmentManager говорится, что

Порядок фрагментов в списке - это порядок, в котором они были добавлены или прикреплены.

Когда вам нужно сделать что-то на основе текущего типа фрагмента, просто используйте getCurrentFragment() instance of MyFragment вместо currentFragmentTag.equals("my_fragment_tag").

Обратите внимание, что getCurrentFragment() в onAttachFragment не получит присоединяемый Fragment, но предыдущий прикрепленный.

0
Jeffrey Chen

это лучший способ:

       Android.app.Fragment currentFragment=getFragmentManager().findFragmentById(R.id.main_container);
            if(currentFragment!=null)
            {
                String[] currentFragmentName = currentFragment.toString().split("\\{");
                if (currentFragmentName[0].toString().equalsIgnoreCase("HomeSubjectFragment"))
                {
                    fragment = new HomeStagesFragment();
                    tx = getSupportFragmentManager().beginTransaction();
                    tx.replace(R.id.main_container, fragment);
                    tx.addToBackStack(null);
                    tx.commit();
                }
                else if(currentFragmentName[0].toString().equalsIgnoreCase("HomeStagesFragment"))
                {
                    new AlertDialog.Builder(this)
                            .setMessage("Are you sure you want to exit?")
                            .setCancelable(false)
                            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int id) {
                                    finish();
                                }
                            })
                            .setNegativeButton("No", null)
                            .show();
                }

            }

не забудьте определить это в заголовке:

private Fragment fragment;
FragmentTransaction tx;
0
Osama Ibrahim

Пожалуйста, попробуйте этот метод ..... 

private Fragment getCurrentFragment(){
    FragmentManager fragmentManager = getSupportFragmentManager();
    String fragmentTag = fragmentManager.getBackStackEntryAt(fragmentManager.getBackStackEntryCount() - 1).getName();
    Fragment currentFragment = getSupportFragmentManager()
.findFragmentByTag(fragmentTag);
    return currentFragment;
}
0
Manmohan Soni

ну, я думаю, вы хотите увидеть, в каком фрагменте вы находитесь Я думаю, что есть решение, которое я не считаю лучшим , но оно работает Сначала вообще


вы должны создать родительский фрагмент, чтобы он расширял фрагмент 


public class Fragment2 extends Fragment {
    private static position;
    public static int getPosition() {
        return position;
    }

    public static void setPosition(int position) {
        FragmentSecondParent.position = position;
    }
}

Второй

вы должны расширить его в каждом фрагменте и в каждой записи в onCreateView 

setPosition(//your fragmentposition here)

В третьих


где вы хотите получить текущий фрагмент, вы должны


напиши это

Fragment2 fragment= (Fragment2) getSupportFragmentManager()
    .findFragmentById(R.id.fragment_status);

int position = fragment.getPosition();
if(//position condition)
{
    //your code here
}
0
Farido mastr