gpt4 book ai didi

java - Android:从 PagerAdapter 获取 fragment

转载 作者:行者123 更新时间:2023-11-30 01:51:04 25 4
gpt4 key购买 nike

所以我正在尝试使用自定义 FragmentStatePagerAdapter 实现 ViewPager。在我的 MainActivity 中,我试图访问正在显示的 fragment ,以便我可以修改该 fragment View 内的子项。

这是自定义 fragment :

public class CustomFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_custom, container, false);
return rootView;
}
}

这是 FragmentStatePagerAdapter:

public class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {

private int NUM_PAGES;

public ScreenSlidePagerAdapter(FragmentManager fm, int NUM_PAGES) {
super(fm);
this.NUM_PAGES = NUM_PAGES;
}

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

@Override
public Fragment getItem(int position) {
return new CustomFragment();
}

}

这是 MainActivity 中的重要部分。这是我尝试获取寻呼机适配器当前显示的 fragment 的地方。 mPagerAdapter.instantiateItem 返回一个 fragment ,但是当我调用 primaryFragment.getView() 时,我得到一个空指针。

    moveViewPagerToIndex(); // Move the view pager to NUM_PAGES / 2 to start
primaryFragment = (CustomFragment) mPagerAdapter.instantiateItem(mViewPager, mViewPager.getCurrentItem());
updateFragment();

updateFragment():

    ArrayList<Button> arrayList = Utility.getCellsFromCalendarFragment(primaryFragment.getView());
for (int i = 0; i < arrayList.size(); i++) {
// do stuff with all the cells
}

Utility.getCellsFromCalendarFragment(View rootView)

public static ArrayList<Button> getCellsFromCalendarFragment(View rootView) {
ArrayList<Button> cellList = new ArrayList<>();
cellList.add((Button) rootView.findViewById(R.id.cell00));
cellList.add((Button) rootView.findViewById(R.id.cell01));
cellList.add((Button) rootView.findViewById(R.id.cell02));
// There are a lot more than 3 cells... There's roughly 50 cells.
return cellList
}

我在 Android Studio 中运行了调试器并观察了变量“primaryFragment”。当我调用 mViewPager.instantiateItem(...) 时,我得到了一个实际的 CustomFragment。问题是“primaryFragment”现在有一个空 View ,所以当我尝试访问该 View 以修改单元格时,我得到一个 NullPointerException。

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference

如何从这个 fragment 中获取 View ?这甚至是从 View 寻呼机获取 fragment 的正确方法吗?我一直在为此焦头烂额。我只想获取正在显示的 fragment 并修改其 View 和子项。

谢谢!

最佳答案

FragmentStatePagerAdapter.instantiateItem() 通过调用 getItem() 创建新的 Fragment。您的 getItem() 每次被调用时都会创建一个新的 CustomFragment 实例。因此,当您调用 isntantiateItem() 时,您将获得 CustomFragment 的新实例,而不是适配器正在使用的实例。

您可能需要在适配器中存储 CustomFragment 的实例,并编写一个方法通过索引获取它们。

我不确定您的完整用例,因此我无法就您如何继续修改适配器提供建议。我的意思是我不知道你想访问哪个 fragment ,如果它是当前显示的 fragment ,或者是远离屏幕的某个遥远的 fragment 。

关于java - Android:从 PagerAdapter 获取 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33049192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com