recycleview项第一次没有显示



我已经谷歌过了,而且从昨天开始我就在谷歌和做一些随机的事情

在片段A中,我有一个连接到ViewPager2的标签布局。

和第一个选项卡有一个片段与recyclerview。当我打开片段a时,我无法在recyclerview中看到任何项目。但是当我改变选项卡并返回到第一个选项卡时,Item出现了。

what i tried

  • 我在另一个活动中做过类似的事情,效果很好。
  • 我在添加数据后打印了数组列表。它的工作原理。
  • 我试图在一个活动中独立打开这个片段,它工作得很好。
  • 它似乎只是发生的问题,当它是在viewpager

view page and tablayout代码

ViewPager2 viewPager2 = view.findViewById(R.id.shopVP);
viewPager2.setAdapter(new ShopMenuTabAdapter(getActivity()));
TabLayout tabLayout = view.findViewById(R.id.shopTab);
TabLayoutMediator tabLayoutMediator = new TabLayoutMediator(tabLayout, viewPager2, (tab, position) -> {
switch (position){
case 0:
tab.setText("Services Categories");
break;
case 1:
tab.setText("Reviews");
break;
case 2:
tab.setText("About");
break;
}
});
tabLayoutMediator.attach();

标签适配器代码

List<Fragment> mData = Arrays.asList(   //as you can see i have 3 tabs.
new ShopServicesCategories(),  // recyclerview is in this tab.
new ShopReview(),
new ShopAbout()
);
public ShopMenuTabAdapter(@NonNull FragmentActivity fragmentActivity) {
super(fragmentActivity);
}
@NonNull
@Override
public Fragment createFragment(int position) {
return mData.get(position);
}
@Override
public int getItemCount() {
return mData.size();
}

这是我如何设置recyclerview和它的适配器

//作为"服务类别";和"子节";有相同的变量。我没有特意为类别创建一个模型。

// in class    
RecyclerView rv;
List<SubSectionModel> mData = new ArrayList<>();
SubSectionAdapter mAdapter;
LinearLayoutManager llm = new LinearLayoutManager(getActivity());
// in onCreateView
rv = view.findViewById(R.id.shop_sservice_cat_rv);
rv.setLayoutManager(llm);
// in class
// i call this method after adding data to ArrayList.
private void setupRecyclerView(List<SubSectionModel> mData) { 
mAdapter = new SubSectionAdapter(getActivity(), mData, new SubSectionAdapter.OnItemClickListener() {
@Override
public void onItemClick(SubSectionModel subSectionModel) {
Log.i("click",subSectionModel.getSub()+" "+subSectionModel.getHave_sub_sec());
openSubSec(subSectionModel.getSub());
}
});
rv.setAdapter(mAdapter);
}

我刚刚改变了recyclerview的高度,以wrap内容而不是0dp(匹配约束)。

首先,获取数据,然后设置选项卡。

从服务器获取数据需要太多时间,那么你可以简单地将这些数据获取到你的主活动中,并将其全局存储在你的应用程序中,然后将这些数据传递到你的选项卡中。

传递参数到片段

adapter.addFragment(AboutFragment.newInstance(data), "About");
adapter.addFragment(SkillsFragment.newInstance(data), "Skills");

主应用程序类:

public class App extends Application {
public static List<UserInfo> userInfo = new ArrayList<>();
public static List<Skills> skillsList = new ArrayList<>();
public static Users getUserInfo() {
return userInfo;
}
public static void setUserInfo(UserInfo userInfo) {
App.userInfo = userInfo;
}
public static Users getSkillsList() {
return skillsList;
}
public static void setSkillsList(Skills skillsList) {
App.skillsList = skillsList;
}
}

然后把这个添加到你的manifest中:

<application
android:name=".App"
....>
....
....
</application>

最新更新