programing

보기 페이지에서 현재 조각 인스턴스 가져오기

minimums 2023. 10. 5. 21:25
반응형

보기 페이지에서 현재 조각 인스턴스 가져오기

아래는 다음과 같은 나의 코드입니다.3 Fragment classes각 3다에 내장되어 있습니다.ViewPager 메뉴 옵션이 있습니다.에 나와 있는 것과 같이onOptionsItemSelected()해서 현재 .업데이트를 하려면 프래그먼트 클래스에 있는 메소드를 호출해야 합니다.누가 그 방법을 어떻게 부르는지 제안해 주실 수 있나요?

public class MainActivity  extends ActionBarActivity {

     ViewPager ViewPager;
     TabsAdapter TabsAdapter;

     @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            ViewPager = new ViewPager(this);
            ViewPager.setId(R.id.pager);
            setContentView(ViewPager);

            final ActionBar bar = getSupportActionBar();

            bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

            //Attaching the Tabs to the fragment classes and setting the tab title.
            TabsAdapter = new TabsAdapter(this, ViewPager);
            TabsAdapter.addTab(bar.newTab().setText("FragmentClass1"),
                    FragmentClass1.class, null);
            TabsAdapter.addTab(bar.newTab().setText("FragmentClass2"),
              FragmentClass2.class, null);
            TabsAdapter.addTab(bar.newTab().setText("FragmentClass3"),
              FragmentClass3.class, null);


            if (savedInstanceState != null) {
                bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));
            }

        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {

            switch (item.getItemId()) {

            case R.id.addText:

           **// Here I need to call the method which exists in the currently visible Fragment class**

                    return true;

            }

            return super.onOptionsItemSelected(item);
        }


     @Override
     protected void onSaveInstanceState(Bundle outState) {
      super.onSaveInstanceState(outState);
            outState.putInt("tab", getSupportActionBar().getSelectedNavigationIndex());

     }

     public static class TabsAdapter extends FragmentPagerAdapter
      implements ActionBar.TabListener, ViewPager.OnPageChangeListener {

      private final Context mContext;
            private final ActionBar mActionBar;
            private final ViewPager mViewPager;
            private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();

            static final class TabInfo {
                private final Class<?> clss;
                private final Bundle args;

                TabInfo(Class<?> _class, Bundle _args) {
                    clss = _class;
                    args = _args;
                }
            }

      public TabsAdapter(ActionBarActivity activity, ViewPager pager) {
       super(activity.getSupportFragmentManager());
                mContext = activity;
                mActionBar = activity.getSupportActionBar();
                mViewPager = pager;
                mViewPager.setAdapter(this);
                mViewPager.setOnPageChangeListener(this);
            }

      public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) {
                TabInfo info = new TabInfo(clss, args);
                tab.setTag(info);
                tab.setTabListener(this);
                mTabs.add(info);
                mActionBar.addTab(tab);
                notifyDataSetChanged();

            }

      @Override
      public void onPageScrollStateChanged(int state) {
       // TODO Auto-generated method stub

      }

      @Override
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
       // TODO Auto-generated method stub

      }

      @Override
      public void onPageSelected(int position) {
       // TODO Auto-generated method stub
       mActionBar.setSelectedNavigationItem(position);
      }

      @Override
      public void onTabReselected(Tab tab, FragmentTransaction ft) {
       // TODO Auto-generated method stub

      }

      @Override
      public void onTabSelected(Tab tab, FragmentTransaction ft) {
       Object tag = tab.getTag();
                for (int i=0; i<mTabs.size(); i++) {
                    if (mTabs.get(i) == tag) {
                        mViewPager.setCurrentItem(i);

                    }
                }

                tabPosition = tab.getPosition();
      }

      @Override
      public void onTabUnselected(Tab tab, FragmentTransaction ft) {
       // TODO Auto-generated method stub

      }

      @Override
      public Fragment getItem(int position) {
       TabInfo info = mTabs.get(position);
                return Fragment.instantiate(mContext, info.clss.getName(), info.args);
      }

      @Override
      public int getCount() {
       return mTabs.size();
      }

     }

    }

가 합니다.updateList()전화하고 싶습니다:

 public class FragmentClass1{

    ArrayList<String> originalData;


    @Override
         public View onCreateView(LayoutInflater inflater, ViewGroup container,
           Bundle savedInstanceState) {

          View fragmentView = inflater.inflate(R.layout.frag1, container, false);

          originalData = getOriginalDataFromDB();

          return fragmentView;

         }


    public void updateList(String text)
    {
       originalData.add(text);
       //Here I could do other UI part that need to added
    }
}

옵션을 선택해서 현재 보이는 프래그먼트를 업데이트해야 합니다.

은 입니다.FragmentPagerAdapter구현:

case R.id.addText:
     Fragment page = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.pager + ":" + ViewPager.getCurrentItem());
     // based on the current position you can then cast the page to the correct 
     // class and call the method:
     if (ViewPager.getCurrentItem() == 0 && page != null) {
          ((FragmentClass1)page).updateList("new item");     
     } 
return true;

이름이 . 클래스 이름이 매우 혼란스럽습니다.ViewPager ViewPager,사용하다ViewPager mPager예를 들어).

    public class MyPagerAdapter extends FragmentPagerAdapter {
        private Fragment mCurrentFragment;

        public Fragment getCurrentFragment() {
            return mCurrentFragment;
        }
//...    
        @Override
        public void setPrimaryItem(ViewGroup container, int position, Object object) {
            if (getCurrentFragment() != object) {
                mCurrentFragment = ((Fragment) object);
            }
            super.setPrimaryItem(container, position, object);
        }
    }

우선 모든 "활성" 조각 페이지를 추적합니다.이 경우 ViewPager에서 사용되는 FragmentStatePagerAdapter에서 조각 페이지를 추적합니다.

@Override
public Fragment getItem(int index) {
    Fragment myFragment = MyFragment.newInstance();
    mPageReferenceMap.put(index, myFragment);
    return myFragment;
}

"비활성" 프래그먼트 페이지에 대한 참조를 유지하지 않으려면 FragmentStatePagerAdapter의 destroyItem(...) 메서드를 구현해야 합니다.

@Override
public void destroyItem (ViewGroup container, int position, Object object) {
    super.destroyItem(container, position, object);
    mPageReferenceMap.remove(position);
}

현재 보이는 페이지에 액세스해야 할 경우 다음을 호출합니다.

int index = mViewPager.getCurrentItem();
MyAdapter adapter = ((MyAdapter)mViewPager.getAdapter());
MyFragment fragment = adapter.getFragment(index);

MyAdapter의 get Fragment(int) 메서드가 다음과 같은 경우:

public MyFragment getFragment(int key) {
    return mPageReferenceMap.get(key);
}

도움이 되기를 바랍니다!

이 방법만이 NullPoint를 얻을 수 없습니다.해당 특정 프래그먼트 클래스의 인스턴스 변수에 대한 예외입니다.이것은 같은 것을 고수하는 다른 사람들에게 도움이 될 수 있습니다.온 옵션에서ItemSelected(), 아래 방법으로 코딩했습니다.

if(viewPager.getCurrentItem() == 0) {
    FragmentClass1 frag1 = (FragmentClass1)viewPager
                            .getAdapter()
                            .instantiateItem(viewPager, viewPager.getCurrentItem());
    frag1.updateList(text); 
} else if(viewPager.getCurrentItem() == 1) {
    FragmentClass2 frag2 = (FragRecentApps)viewPager
                            .getAdapter()
                            .instantiateItem(viewPager, viewPager.getCurrentItem());
    frag2.updateList(text);
}

FragmentStatePagerAdapter에 인스턴스화라는 이름의 공개 메서드가 있습니다.지정된 매개 변수 값을 기준으로 조각을 반환하는 항목으로, 이 메서드에는 ViewGroup(ViewPager)과 Position(위치) 두 개의 매개 변수가 있습니다.

public Object instantiateItem(ViewGroup container, int position);

이 방법으로 특정 위치의 조각을 얻었더니

Fragment fragment = (Fragment) adaper.instantiateItem(mViewPager, position);
getSupportFragmentManager().getFragments().get(viewPager.getCurrentItem());

위 라인에서 검색한 인스턴스를 작업할 조각에 캐스트합니다.완벽하게 잘 작동합니다.

viewPager

조각을 관리하는 호출기 인스턴스입니다.

너무 늦었지만 제가 할 수 있는 방법은 간단합니다.

// 0의 가능성에서 단편의 경우.

((mFragment) viewPager.getAdapter().instantiateItem(viewPager, 0)).yourMethod();

여기에는 이것을 예측할 수 있는 방법이 실제로는 없다는 기본적인 사실을 다루지 않은 많은 답변이 있습니다. 그리고 미래의 어느 시점에서 자신의 발에 총을 쏘지 않는 방식으로 말이죠.

FragmentStatePagerAdapter을 알고 입니다.FragmentManager할 수 입니다 ID의입니다장다 때문에 를 추적하려고 수 FragmentStatePagerAdapter상태를 복원할 때 콜백을 호출하지 않을 수도 있습니다.

수 은 입니다를 코드를 입니다.FragmentStatePagerAdapter그리고 에를 들어,합니다()에 mFragments.get(pos)이한 것으로 , 어느 에서 볼 수 이 방법은 프래그먼트가 실제로 사용 가능하다고 가정합니다(즉, 어느 지점에서 볼 수 있었습니다).

이라면인 의 할 수 mFragments목록은 다시 원점으로 돌아갔습니다 (목록 이름은 그대로 유지된다는 보장이 없습니다).)

옵션을 선택해서 현재 보이는 프래그먼트를 업데이트해야 합니다.

합니다에 합니다.ViewPager~하듯이mPager그러면 에서 . 를(를) 합니다.currentFragment:

  1. PageAdapter adapter = mPager.getAdapter();
  2. int fragmentIndex = mPager.getCurrentItem();
  3. FragmentStatePagerAdapter fspa = (FragmentStatePagerAdapter)adapter;
  4. Fragment currentFragment = fspa.getItem(fragmentIndex);

3번 선을 사용하는 유일한 캐스트는 일반적으로 유효합니다.FragmentStatePagerAdapter는 ViewPager에 유용한 어댑터입니다.

가장 좋은 방법은 Calling FragmentName fragment = (Calling FragmentName) viewPager.getAdapter() .instantiateItem(viewPager, viewPager.getCurrentItem());호출 프래그먼트를 다시 인스턴스화하여 Null 포인터 예외를 발생시키지 않고 해당 프래그먼트의 어떤 메소드도 호출하지 않습니다.

현재 조각:

fragments 탭바 템플릿을 사용하여 프로젝트를 생성한 경우 이 작업이 수행됩니다.

Fragment f = mSectionsPagerAdapter.getItem(mViewPager.getCurrentItem());

이 작업은 기본 탭 작업 템플릿 구현과 함께 작동합니다.

나는 다음을 사용했습니다.

 int index = vpPager.getCurrentItem();
 MyPagerAdapter adapter = ((MyPagerAdapter)vpPager.getAdapter());
 MyFragment suraVersesFragment = (MyFragment)adapter.getRegisteredFragment(index);

viewPager를 사용할 때 활동에서 fragment 인스턴스에 액세스하는 좋은 방법은 instantiateItem(viewpager, index)입니다.//index - 인스턴스(instance)를 만들 조각 인덱스입니다.

예를 들어, 나는 1 인덱스의 프래그먼트 인스턴스에 접속하고 있습니다.

Fragment fragment = (Fragment) viewPageradapter.instantiateItem(viewPager, 1);

if (fragment != null && fragment instanceof MyFragment) {      
 ((MyFragment) fragment).callYourFunction();

}

이전 구현에서는 나중에 액세스할 수 있도록 하위 프래그먼트 목록을 저장했지만, 이는 잘못된 구현으로 인해 엄청난 메모리 누수가 발생했습니다.

사용하게 되었습니다.instantiateItem(...)전류를 가져오는 방법 조각:

val currentFragment = adapter?.instantiateItem(viewPager, viewPager.currentItem)

또는 다른 조각을 제자리에 놓으려면:

val position = 0
val myFirstFragment: MyFragment? = (adapter?.instantiateItem(viewPager, position) as? MyFragment)

설명서에서:

지정된 위치에 대한 페이지를 만듭니다.어댑터는 여기에 제공된 컨테이너에 뷰를 추가할 책임이 있지만, 이 작업은 업데이트 완료(ViewGroup)에서 반환될 때까지만 수행되어야 합니다.

FragmentStatePagerAdapter에는이가)다라는 .mCurrentPrimaryItemFragment 안드로이드 개발자들이 왜 게터를 제공하지 않았는지 궁금할 뿐입니다.됩니다.setPrimaryItem()방법. 대한 를 얻을 수 이 메서드를 하십시오.따라서 이 변수에 대한 참조를 얻을 수 있도록 이 메서드를 재정의합니다. 제 다를 에 그쳤습니다.mCurrentPrimaryItem것 내용 하기.setPrimaryItem()제가 오버라이드 할 수 있게요.

할 때FragmentStatePagerAdapter:

private Fragment mCurrentPrimaryItem = null;

@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
    Fragment fragment = (Fragment)object;
    if (fragment != mCurrentPrimaryItem) {
        if (mCurrentPrimaryItem != null) {
            mCurrentPrimaryItem.setMenuVisibility(false);
            mCurrentPrimaryItem.setUserVisibleHint(false);
        }
        if (fragment != null) {
            fragment.setMenuVisibility(true);
            fragment.setUserVisibleHint(true);
        }
        mCurrentPrimaryItem = fragment;
    }
}

public TasksListFragment getCurrentFragment() {
    return (YourFragment) mCurrentPrimaryItem;
}

를 할 수 .PagerAdapter이렇게 하면 당신은 어떤 것이든 얻을 수 있을 것입니다.Fragment인에ViewPager.

private class PagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();

    public PagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment) {
        mFragmentList.add(fragment);
    }
}

Fragment

Fragment currentFragment = mPagerAdapter.getItem(mViewPager.getCurrentItem());

모든 댓글과 답변을 읽고 이 문제에 대한 최적의 해결책을 설명하겠습니다.최선의 방법은 @rik의 해결책이므로, 저의 개선은 그의 해결책에 근거합니다.

각 FragmentClass에 다음과 같이 요청할 필요가 없습니다.

if(FragmentClass1){
   ...
if(FragmentClass2){
   ...
}

자신만의 인터페이스를 만들고, 아이들이 그 인터페이스를 구현하도록 만들어라, 예를 들어, 예를 들어,

public interface MyChildFragment {
    void updateView(int position);
}

그런 다음 내부 프래그먼트를 시작하고 업데이트할 수 있습니다.

Fragment childFragment = (Fragment) mViewPagerDetailsAdapter.instantiateItem(mViewPager,mViewPager.getCurrentItem());

if (childFragment != null) {
   ((MyChildFragment) childFragment).updateView();
}

그 해 요.insatiateItem에.savedInstanceState입니다의 .

public void onCreate(@Nullable Bundle savedInstanceState){
      super(savedInstanceState)
}

앱이 다운됩니다.

행운을 빌어요

저도 같은 문제가 있어서 이 코드로 해결했습니다.

MyFragment fragment = (MyFragment) thisActivity.getFragmentManager().findFragmentById(R.id.container);

MyFragment라는 이름을 프래그먼트의 이름으로 바꾸고 프래그먼트 컨테이너의 ID를 추가하면 됩니다.

이는 수용된 답변보다 미래에 더 유리합니다.

public class MyFragmentPagerAdapter extends FragmentPagerAdapter {

    /* ------------------------------------------------------------------------------------------ */
    // region Private attributes :

    private Context _context;
    private FragmentManager _fragmentManager;
    private Map<Integer, String> _fragmentsTags = new HashMap<>();

    // endregion
    /* ------------------------------------------------------------------------------------------ */



    /* ------------------------------------------------------------------------------------------ */
    // region Constructor :

    public MyFragmentPagerAdapter(Context context, FragmentManager fragmentManager) {

        super(fragmentManager);

        _context = context;
        _fragmentManager = fragmentManager;
    }

    // endregion
    /* ------------------------------------------------------------------------------------------ */



    /* ------------------------------------------------------------------------------------------ */
    // region FragmentPagerAdapter methods :

    @Override
    public int getCount() { return 2; }

    @Override
    public Fragment getItem(int position) {

        if(_fragmentsTags.containsKey(position)) {

            return _fragmentManager.findFragmentByTag(_fragmentsTags.get(position));
        }
        else {

            switch (position) {

                case 0 : { return Fragment.instantiate(_context, Tab1Fragment.class.getName()); }
                case 1 : { return Fragment.instantiate(_context, Tab2Fragment.class.getName()); }
            }
        }

        return null;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {

        // Instantiate the fragment and get its tag :
        Fragment result = (Fragment) super.instantiateItem(container, position);
        _fragmentsTags.put(position, result.getTag());

        return result;
    }

    // endregion
    /* ------------------------------------------------------------------------------------------ */
}

각 프래그먼트가 자체 메뉴 항목을 추가하고 Options(옵션)를 직접 처리하면 해당 시나리오를 더 잘 처리할 수 있습니다.항목 선택(), 공식 문서에 설명되어 있습니다.문서화되지 않은 속임수는 피하는 것이 좋습니다.

이것은 가장 간단한 해킹입니다.

fun getCurrentFragment(): Fragment? {
    return if (count == 0) null
    else instantiateItem(view_pager, view_pager.currentItem) as? Fragment
}

(kot 코드)

그냥 전화하세요.instantiateItem(viewPager, viewPager.getCurrentItem()다에게 Fragment 당신의 아이템은 이미 인스턴스화 되어 있을 것입니다.다음 항목에 대한 검사를 추가할 수 있는지 확인합니다.getCount.

두 가지 모두에서 작동FragmentPagerAdapter그리고.FragmentStatePagerAdapter!

호출기가 조각 안에 있으면 다음을 사용합니다.

private fun getPagerCurrentFragment(): Fragment? {
    return childFragmentManager.findFragmentByTag("android:switcher:${R.id.myViewPagerId}:${myViewPager.currentItem}")
}

에.R.id.myViewPagerIdxml는 ViewPager의 ID입니다 입니다.

그가 @chahat jain이라고 대답한 것에 근거해서:

"viewPager를 사용할 때 활동에서 fragment 인스턴스에 액세스하는 좋은 방법은 instantiateItem(viewpager, index)입니다.//index - 인스턴스(instance)를 만들 조각 인덱스입니다."

코틀린에서 그렇게 하고 싶다면.

val fragment =  mv_viewpager.adapter!!.instantiateItem(mv_viewpager, 0) as Fragment
                if ( fragment is YourFragmentFragment)
                 {
                    //DO somthign 
                 }

0에서 0의 조각 인스턴스(instance

//=========================================================================// //############################################################################################################################################

여기에 다음과 같은 완벽한 예가 있습니다.

여기 .xml 파일에 있는 나의 viewPager입니다.

   ...
    <android.support.v4.view.ViewPager
                android:id="@+id/mv_viewpager"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_margin="5dp"/>
    ...

그리고 탭을 삽입하는 홈 액티비티.

...
import kotlinx.android.synthetic.main.movie_tab.*

class HomeActivity : AppCompatActivity() {

    lateinit var  adapter:HomeTabPagerAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
       ...
    }



    override fun onCreateOptionsMenu(menu: Menu) :Boolean{
            ...

        mSearchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
          ...

            override fun onQueryTextChange(newText: String): Boolean {

                if (mv_viewpager.currentItem  ==0)
                {
                    val fragment =  mv_viewpager.adapter!!.instantiateItem(mv_viewpager, 0) as Fragment
                    if ( fragment is ListMoviesFragment)
                        fragment.onQueryTextChange(newText)
                }
                else
                {
                    val fragment =  mv_viewpager.adapter!!.instantiateItem(mv_viewpager, 1) as Fragment
                    if ( fragment is ListShowFragment)
                        fragment.onQueryTextChange(newText)
                }
                return true
            }
        })
        return super.onCreateOptionsMenu(menu)
    }
        ...

}

활동 내용:

int currentPage = 0;//start at the first tab
private SparseArray<Fragment> fragments;//list off fragments
viewPager.setOnPageChangeListener(new OnPageChangeListener() {

@Override
public void onPageSelected(int pos) {
        currentPage = pos;//update current page
}

@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {}
@Override
public void onPageScrollStateChanged(int arg0) {}
});



@Override
public void onAttachFragment(Fragment fragment) {
    super.onAttachFragment(fragment);
    if(fragment instanceof Fragment1)
        fragments.put(0, fragment);
    if(fragment instanceof Fragment2)
        fragments.put(2, fragment);
    if(fragment instanceof Fragment3)
        fragments.put(3, fragment);
    if(fragment instanceof Fragment4)
        fragments.put(4, fragment);
}

Then I have the following method for getting the current fragment

public Fragment getCurrentFragment() {
    return fragments.get(currentPage);
}

set Primary 재정의FragmentPagerAdapter의 항목: 개체는 눈에 보이는 조각입니다.

 @Override
        public void setPrimaryItem(ViewGroup container, int position, Object object) {
            if (mCurrentFragment != object) {
                mCurrentFragment = (LeggiCapitoloFragment) object;
            }
            super.setPrimaryItem(container, position, object);
        }

호출기에서 현재 항목을 가져온 다음 어댑터에 해당 위치의 조각을 요청하면 됩니다.

 int currentItem = viewPager.getCurrentItem();
    Fragment item = mPagerAdapter.getItem(currentItem);
    if (null != item && item.isVisible()) {
       //do whatever want to do with fragment after doing type checking
        return;
    }

현재 조각을 가져오려면 - ViewPager에서 PageSelected(최종 int 위치)의 공용 공백에 위치한 다음

public PlaceholderFragment getFragmentByPosition(Integer pos){
    for(Fragment f:getChildFragmentManager().getFragments()){
        if(f.getId()==R.viewpager && f.getArguments().getInt("SECTNUM") - 1 == pos) {
            return (PlaceholderFragment) f;
        }
    }
    return null;
}

SECTNUM - public static Placeholder Fragment newInstance(int sectionNumber)에서 할당된 위치 인수; fragment

getChildFragmentManager() 또는 getFragmentManager() - 생성된 SectionsPagerAdapter에 따라 달라집니다.

단편에 브로드캐스트 수신기를 구현하고 어디에서나 의도를 전송할 수 있습니다.프래그먼트의 수신기는 특정 동작을 청취하고 인스턴스의 메서드를 호출할 수 있습니다.

한 가지 주의 사항은 View 구성 요소가 이미 인스턴스화되어 있는지 확인하고 목록 스크롤과 같은 일부 작업의 경우 ListView를 이미 렌더링해야 한다는 것입니다.

Array of fragment를 레지스터 fragment로 선언할 수 있습니다.

class DashboardPagerAdapter(fm: FragmentManager?) : FragmentStatePagerAdapter(fm!!) {
    // CURRENT FRAGMENT
    val registeredFragments = SparseArray<Fragment>()

    override fun instantiateItem(container: ViewGroup, position: Int): Any {
        val fragment = super.instantiateItem(container, position) as Fragment
        registeredFragments.put(position, fragment)
        return fragment
    }

    override fun getItem(position: Int): Fragment {
        return when (position) {
            0 -> HomeFragment.newInstance()
            1 -> ConverterDashboardFragment.newInstance()
            2 -> CartFragment.newInstance()
            3 -> CustomerSupportFragment.newInstance()
            4 -> ProfileFragment.newInstance()
            else -> ProfileFragment.newInstance()
        }
    }

    override fun getCount(): Int {
        return 5
    }

}

그러면 다음과 같이 사용할 수 있습니다.

adapter?.let {
    val cartFragment = it.registeredFragments[2] as CartFragment?
    cartFragment?.myCartApi(true)
}

나는 다음을 시도했습니다.

 int index = mViewPager.getCurrentItem();
 List<Fragment> fragments = getSupportFragmentManager().getFragments();
 View rootView = fragments.get(index).getView();

언급URL : https://stackoverflow.com/questions/18609261/getting-the-current-fragment-instance-in-the-viewpager

반응형