在嵌套的Fragment中,当TabLayout更改添加的新片段实例但RecyclerView不更新时

时间:2018-09-25 10:04:31

标签: android android-viewpager android-tablayout custom-adapter android-nested-fragment

我有一个名为Fragment的{​​{1}},其中包含HomeFragmentTabLayoutViewPager填充了来自后端的数据。因此,每个选项卡项都有一个名称,并且在更改选项卡位置时,我从后端获取数据,并将另一个名为TabLayout的片段添加到SecondFragmentViewPagerSecondFragment组成,我在其中填充了来自后端的数据。我需要的是,当制表符更改时,将调用一个与之对应的RecyclerView,并且响应数据应更新为urlRecyclerView中的SecondFragment

到目前为止,我所做的如下:

填充ViewPager

TabLayout

mViewPager= (ViewPager)rootview.findViewById(R.id.viewpager); mTabLayout= (TabLayout)rootview.findViewById(R.id.tabs); HomeModel model; planList = new ArrayList<>(); adapter = new ViewPagerAdapter(getChildFragmentManager()); try { jsonArray = resultData.getJSONArray("details"); editor.putString("tab",jsonArray.getJSONObject(0).getString("name")); editor.commit(); for(int i=0; i<jsonArray.length();i++){ jsonObject2 = jsonArray.getJSONObject(i); model = new HomeModel(); model.setCatid(jsonObject2.getString("id")); model.setImage(jsonObject2.getString("image")); model.setName(jsonObject2.getString("name")); planList.add(model); setupViewPager(mViewPager,jsonObject2.getString("name")); } setAdapter(); } catch (JSONException e) { e.printStackTrace(); } private void setAdapter() { mViewPager.setAdapter(adapter); mTabLayout.setupWithViewPager(mViewPager); } private void setupViewPager(ViewPager mViewPager,String name) { adapter.addFragment(new SecondFragment(), name); }

TabsSelectListener

在我的mTabLayout.setOnTabSelectedListener( new TabLayout.ViewPagerOnTabSelectedListener(mViewPager) { @Override public void onTabSelected(TabLayout.Tab tab) { super.onTabSelected(tab); numTab = tab.getPosition(); HomeModel browsePlan = planList.get(numTab); editor.putString("tab", browsePlan.getName()).apply(); } }); 中,我正在SecondFragment使用自定义适配器类将数据填充到just

Recyclerview代码段:

SecondFragment

添加到适配器:

planList = new ArrayList<>();
try {
    jsonArray = resultData.getJSONArray("products");
    for(int i=0; i<jsonArray.length();i++){
        jsonObject2 = jsonArray.getJSONObject(i);
        model = new Spaceship();
        model.setName(jsonObject2.getString("package_name"));
        model.setImage(jsonObject2.getString("images"));
        planList.add(model);
    }
    setAdapter();
} catch (JSONException e) {
    e.printStackTrace();
}

自定义适配器类

private void setAdapter() {
    adapter = new RecyclerHomeAdapter(getContext(), planList);
    rv.setAdapter(adapter);
    adapter.notifyDataSetChanged();
}

正在添加标签,在public class RecyclerHomeAdapter extends RecyclerView.Adapter<RecyclerHomeAdapter.MyHolder> { private ArrayList<Spaceship> spaceships; private Context c; public RecyclerHomeAdapter(Context c, ArrayList<Spaceship> spaceships) { this.spaceships = spaceships; this.c = c; } @Override public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v= LayoutInflater.from(c).inflate(R.layout.home_package,parent,false); return new MyHolder(v); } @Override public void onBindViewHolder(MyHolder holder, int position) { Spaceship s=spaceships.get(position); holder.nameTxt.setText(s.getName()); Glide.with(c).load(s.getImage()) .thumbnail(0.5f) .crossFade() .fitCenter() .placeholder(R.drawable.loading_image) .diskCacheStrategy(DiskCacheStrategy.ALL) .into(holder.img); } @Override public int getItemCount() { return spaceships.size(); } class MyHolder extends RecyclerView.ViewHolder { TextView nameTxt; ImageView img; public MyHolder(View itemView) { super(itemView); nameTxt= (TextView) itemView.findViewById(R.id.nameTxt); img= (ImageView) itemView.findViewById(R.id.spacecraftImage); } } } 内显示SecondFragment并填充了ViewPager
我的问题是更改标签时。我已登录并发现,在更改每个标签时,我在RecyclerView内获取了正确的数据,但是该数据未更新为SecondFragment。标签更改时,RecyclerView显示以前的数据。

如何使它在制表符更改(例如将RecyclerView的每个实例添加到RecyclerVierw的数据中更新SecondFragment的情况下正常工作?

感谢所有回复。

添加一些屏幕截图以识别我的问题。 如图所示,我有多个选项卡,乐透,板球,足球等。 enter image description here

选择每个选项卡后,我将从后端获取数据,并将其填充到另一个“ SecondFragment”片段中的RecyclerView中,该片段被添加到TabLayout下方的ViewPager中,如图所示。

但是,当我滑动到下一个片段选项卡时,将更改为cricket,并且在“ SecondFragment”中获取了来自与“ cricket”相对应的后端数据,但未更新ViewPager,如第二幅图像所示。
enter image description here

再次,在滑动到下一个选项卡“足球”时,将显示与“板球”相对应的数据,依此类推,如图3所示,然后再次滑动回第一个选项卡,它将显示与任何其他选项卡相对应的数据。
我不知道为什么它没有更新。

enter image description here

0 个答案:

没有答案