Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Tablayout/Viewpager中的空白片段_Android_Android Fragments_Android Recyclerview_Android Adapter_Android Tablayout - Fatal编程技术网

Android Tablayout/Viewpager中的空白片段

Android Tablayout/Viewpager中的空白片段,android,android-fragments,android-recyclerview,android-adapter,android-tablayout,Android,Android Fragments,Android Recyclerview,Android Adapter,Android Tablayout,所以我在拼命寻找我问题的答案。我花了几个小时尝试和重试一些事情,但没有工作。 这就是我的问题: 我的应用程序只有一个活动,即主要活动。 此活动包含一个底部导航栏和一个框架布局,用于根据底部导航栏上项目的选择加载片段 我的PredictionsFragment(由底部导航栏加载)包含一个表格布局(使用库)。在这个片段中,数据列表被加载到线程中,因为它使用internet连接。TableLayout包含PredictionsViewFragment,它显示一个RecyclerView。 当我在底部导

所以我在拼命寻找我问题的答案。我花了几个小时尝试和重试一些事情,但没有工作。 这就是我的问题:

我的应用程序只有一个活动,即主要活动。 此活动包含一个底部导航栏和一个框架布局,用于根据底部导航栏上项目的选择加载片段

我的PredictionsFragment(由底部导航栏加载)包含一个表格布局(使用库)。在这个片段中,数据列表被加载到线程中,因为它使用internet连接。TableLayout包含PredictionsViewFragment,它显示一个RecyclerView。 当我在底部导航栏上选择PredictionsFragment时,TableLayout和所有recyclerview都会完美地显示出来。 但当我转到另一个项目并返回PredictionsFragment时,它会显示一个空白视图

PredictionsFragment代码:

public class PredictionsFragment extends Fragment {

    private static List<Country> countryList = new ArrayList<>();
    private ViewPager viewPager;
    private SmartTabLayout viewPagerTab;
    private FragmentStatePagerItemAdapter adapter;
    private FragmentPagerItems pages;
    private ProgressBar progressBar;
    private ViewGroup tab;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_predictions_tab, container, false);
        initView(view);
        return view;
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        if (countryList.size() == 0) {
            refresh();
        } else {
            refreshViewPager();
        }
    }

    private void initView(View view) {
        tab = (ViewGroup) view.findViewById(R.id.tab);
        tab.addView(LayoutInflater.from(getContext()).inflate(R.layout.fragment_view_predictions, tab, false));
        progressBar = (ProgressBar) view.findViewById(R.id.progressbar);
        viewPager = (ViewPager) view.findViewById(R.id.viewpager);
        viewPagerTab = (SmartTabLayout) view.findViewById(R.id.viewpagertab);

        viewPager.setOffscreenPageLimit(countryList.size());

        pages = new FragmentPagerItems(getContext());
        adapter = new FragmentStatePagerItemAdapter(getFragmentManager(), pages){
            public int getItemPosition(Object object) {
                return POSITION_NONE;
            }
        };
        viewPager.setAdapter(adapter);
        viewPagerTab.setViewPager(viewPager);
    }

    private void refresh() {
        // Thread car connexion internet
        new Thread(new Runnable() {
            @Override
            public void run() {
                countryList = InternetData.getCountryList();
                refreshViewPager();
            }
        }).start();
    }


    private void refreshViewPager() {
        getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
            for (Country country : countryList) {
                pages.add(FragmentPagerItem.of(country.getCode(), PredictionsViewFragment.class));
            }
            adapter.notifyDataSetChanged();
            viewPagerTab.setViewPager(viewPager);
            progressBar.setVisibility(View.GONE);
            }
        });
    }

    public static List<Prediction> getPredictionList(int index) {
        return countryList.get(index).getPredictionList();
    }
}
public class PredictionsViewFragment extends Fragment {
    private RecyclerView recyclerView;
    private PredictionAdapter adapter;
    private int position;

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.recycler_view_pronos, container, false);
        position = FragmentPagerItem.getPosition(getArguments());
        initRecyclerView(view);
        return view;
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
    }

    private void initRecyclerView(View view) {
        recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
        recyclerView.setHasFixedSize(true);
        adapter = new PredictionAdapter(PredictionsFragment.getPredictionList(position));
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        recyclerView.setAdapter(adapter);
    }
}

编辑:

使用getChildFragmentManager()方法时:

我在第二次处理片段时遇到了这个错误(第一次处理时,它工作得非常好):

编辑2:

我在PredictionsFragment上的onViewCreated方法中添加了以下行:

else {
      refreshViewPager();
     }
但它完全没有任何作用。。。选项卡的名称会正确显示,但不会显示recyclerview。。。 就好像tablayout中的片段没有加载

编辑3: 我已将SwipeRefreshLayout添加到我的recyclerview中,对于前两个选项卡,我无法进行拉式刷新,从第三个选项卡中,仅显示一项recyclerview,拉式刷新“有效”,但在recyclerview中仅显示一项

如果你有任何问题,告诉我,我会尽力回答!
提前感谢您的帮助,我非常感谢您在viewPager中使用
setOffsetScreenPageLimit
:这将帮助您在浏览底部选项卡时将数据存储在寻呼机片段中

viewPager.setOffscreenPageLimit(the number of tab you are setting);
  • 要刷新回收器视图中的数据,可以使用“滑动刷新”

  • 所以我解决了我的问题

    您必须使用以下选项:

    adapter = new FragmentPagerItemAdapter(getChildFragmentManager(), pages);
    
    使用FragmentPagerItemAdapter和不使用FragmentStatePagerItemAdapter
    对于sur,您必须使用getChildFragmentManager()

    我也使用BottomNavigationView打开带有viewPager的tabLayout&面临同样的问题。FragmentStatePagerAdapter可用于此


    这个类处理片段状态的保存和恢复->

    请分享你的代码好吗?学习
    setUserVisibleHint()
    methodshow some code??我用一些代码编辑了我的帖子!我添加了一个空白片段的截图和附加的我的代码的设计,并添加了StutOffFIX筛选器,但它没有改变任何东西。我的第一个和第二个片段在我的表格布局中是空白的……你也可以更新VIEpPar适配器代码吗?我在我的应用程序中使用BottomNavigationView,在片段中我使用ViewPager作为选项卡。我还在RecyclerView中加载选项卡片段中的数据,它工作正常。我没有查看寻呼机适配器的代码,我使用上面引用的库。这是一个名为FragmentStatePagerItemAdapter的类
    viewPager.setOffscreenPageLimit(the number of tab you are setting);
    
    adapter = new FragmentPagerItemAdapter(getChildFragmentManager(), pages);