我有一个名为Fragment
的{{1}},其中包含HomeFragment
和TabLayout
。 ViewPager
填充了来自后端的数据。因此,每个选项卡项都有一个名称,并且在更改选项卡位置时,我从后端获取数据,并将另一个名为TabLayout
的片段添加到SecondFragment
。 ViewPager
由SecondFragment
组成,我在其中填充了来自后端的数据。我需要的是,当制表符更改时,将调用一个与之对应的RecyclerView
,并且响应数据应更新为url
中RecyclerView
中的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
的情况下正常工作?
感谢所有回复。
添加一些屏幕截图以识别我的问题。 如图所示,我有多个选项卡,乐透,板球,足球等。
选择每个选项卡后,我将从后端获取数据,并将其填充到另一个“ SecondFragment”片段中的RecyclerView中,该片段被添加到TabLayout下方的ViewPager中,如图所示。
但是,当我滑动到下一个片段选项卡时,将更改为cricket,并且在“ SecondFragment”中获取了来自与“ cricket”相对应的后端数据,但未更新ViewPager
,如第二幅图像所示。
再次,在滑动到下一个选项卡“足球”时,将显示与“板球”相对应的数据,依此类推,如图3所示,然后再次滑动回第一个选项卡,它将显示与任何其他选项卡相对应的数据。
我不知道为什么它没有更新。