android - 在嵌套片段中,当 TabLayout 更改添加片段的新实例但 RecyclerView 未更新时
问题描述
我有一个Fragment
named HomeFragment
,由一个TabLayout
and组成ViewPager
。TabLayout
填充了来自后端的数据。所以每个选项卡项都有一个名称,并且在更改选项卡位置时,我从后端获取数据并添加另一个片段,命名SecondFragment
为ViewPager
. SecondFragment
包括,RecyclerView
我用来自后端的数据填充它。What I need is when tabs changes then an url
corresponding to it is called and the response data should updated to RecyclerView
in SecondFragment
within the 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
. When tabs changes RecyclerView
shows previous data.
我怎样才能使它在标签更改时正常工作,即更新RecyclerVierw
我在添加每个实例时获得的SecondFragment
数据ViewPager
?
感谢所有回复。
添加一些屏幕截图以识别我的问题。如图所示,我有多个标签、乐透、板球、足球等。
当每个选项卡被选中时,我从后端获取数据并将其填充到 anotherFragment“SecondFragment”中的 RecyclerView,它被添加到 TabLayout 下方的 ViewPager,如图所示。
但是,当我滑动到下一个片段选项卡更改为 cricket 时,在“SecondFragment”中获取来自后端的与“cricket”相对应的数据,但它没有更新RecyclerView
,如第二张图片所示。
同样,在滑动到下一个选项卡“足球”时,显示与“板球”相对应的数据,依此类推,如图 3 所示,然后滑动回第一个选项卡,它显示与任何其他选项卡对应的数据。
我不知道为什么它没有得到更新。
解决方案
推荐阅读
- javascript - 如何获取文件夹中的所有文件 - javascript
- angular - Angular 9 错误 = 可分配给极少数其他类型的类型
- reactjs - Redux Form - 页面加载时未设置初始值
- python - 从 Keras 模型的中间移除一个层
- python - 用 Python 应用自组织图
- vb.net - 防止在编辑 DGV vb.net 中的新插入行时动态添加多行
- python - 为什么我需要使用 np.array 来获取错误“列表对象没有属性形状”?
- reactjs - 流星离子5反应
- java - Java Maven 程序集插件致命错误编译:无效的目标版本 1.14
- c# - 文件上传失败并显示“超出最大请求长度”。