无法在 ViewPager 中膨胀 recyclerView
Unable to inflate a recyclerView in ViewPager
我无法在 viewPager 中扩充回收站视图。
下面的代码是我的 MainActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = findViewById(R.id.pager);
tabLayout = findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);//setting tab over viewpager
viewPager.setAdapter(new VeiwPagerAdapter());
}
下面是我的 ViewPagerAdapter:
public class VeiwPagerAdapter extends PagerAdapter {
private RecyclerView recyclerView;
private List<Pojo> pojoList = new ArrayList<>();
@Override
public int getCount() {
return 2;
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return false;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
if (position == 0) {
LayoutInflater inflater = LayoutInflater.from(container.getContext());
View view = inflater.inflate(R.layout.recycler_view_holder, container, false);
recyclerView = view.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(container.getContext()));
pojoList.add(new Pojo("Random field 1", "Random field 1"));
recyclerView.setAdapter(new RecycAdapter(pojoList));
container.addView(view);
return view;
} else {
LayoutInflater inflater = LayoutInflater.from(container.getContext());
View view = inflater.inflate(R.layout.recycler_view_holder, container, false);
recyclerView = view.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(container.getContext()));
pojoList.add(new Pojo("Random field 1", "Random field 1"));
recyclerView.setAdapter(new RecycAdapter(pojoList));
container.addView(view);
return view;
}
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return position == 0 ? "TAB 1" : "TAB 2";
}
回收适配器代码:
public class RecycAdapter extends RecyclerView.Adapter<RecycViewHolder> {
private List<Pojo> pojoArrayList;
public RecycAdapter(List<Pojo> pojoArrayList) {
this.pojoArrayList = pojoArrayList;
}
@NonNull
@Override
public RecycViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View v = inflater.inflate(R.layout.item_layout, parent, false);
return new RecycViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull RecycViewHolder holder, int position) {
Pojo pojo = pojoArrayList.get(position);
holder.textView1.setText(pojo.getText1());
holder.textView2.setText(pojo.getText2());
}
@Override
public int getItemCount() {
return pojoArrayList.size();
}
}
ViewHolder 代码添加为 well.Not 确定 viewHolder 实现是否有问题。
public class RecycViewHolder extends RecyclerView.ViewHolder {
public TextView textView1, textView2;
public RecycViewHolder(View itemView) {
super(itemView);
this.textView1 = itemView.findViewById(R.id.textvie1);
this.textView2 = itemView.findViewById(R.id.textvie2);
}
}
每个选项卡下的输出都没有。
有人可以帮我看看我错在哪里吗
您需要将 RecyclerView 填充到 ViewPager 的每个页面中,换句话说,将此代码放在 "instantiateItem" 方法中:
recyclerView = view.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
pojoList.add(new Pojo("Random field 1", "Random field 1"));
recyclerView.setAdapter(new RecycAdapter(pojoList));
为什么你的 MainActivity
上有代码块?
recyclerView = view.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
pojoList.add(new Pojo("Random field 1", "Random field 1"));
recyclerView.setAdapter(new RecycAdapter(pojoList));
}
我可以看到一些冲突 R.id.recyclerView
。
如果您希望 ViewPager 在每个选项卡上显示两个不同的 RecyclerViews
,那么您的 MainActivity
应该只有视图的容器。您能否就您需要实现的目标提供更多背景信息?
您是否尝试过在每个选项卡上显示一个简单且不同的 TextView
/布局?您可能有一些 XML 问题。
最后,找到了一个解决方案,覆盖的方法 isViewFromObject 早些时候返回了 false,这导致了在更改为下面的代码时出现问题,一切正常。
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
我无法在 viewPager 中扩充回收站视图。 下面的代码是我的 MainActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = findViewById(R.id.pager);
tabLayout = findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);//setting tab over viewpager
viewPager.setAdapter(new VeiwPagerAdapter());
}
下面是我的 ViewPagerAdapter:
public class VeiwPagerAdapter extends PagerAdapter {
private RecyclerView recyclerView;
private List<Pojo> pojoList = new ArrayList<>();
@Override
public int getCount() {
return 2;
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return false;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
if (position == 0) {
LayoutInflater inflater = LayoutInflater.from(container.getContext());
View view = inflater.inflate(R.layout.recycler_view_holder, container, false);
recyclerView = view.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(container.getContext()));
pojoList.add(new Pojo("Random field 1", "Random field 1"));
recyclerView.setAdapter(new RecycAdapter(pojoList));
container.addView(view);
return view;
} else {
LayoutInflater inflater = LayoutInflater.from(container.getContext());
View view = inflater.inflate(R.layout.recycler_view_holder, container, false);
recyclerView = view.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(container.getContext()));
pojoList.add(new Pojo("Random field 1", "Random field 1"));
recyclerView.setAdapter(new RecycAdapter(pojoList));
container.addView(view);
return view;
}
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return position == 0 ? "TAB 1" : "TAB 2";
}
回收适配器代码:
public class RecycAdapter extends RecyclerView.Adapter<RecycViewHolder> {
private List<Pojo> pojoArrayList;
public RecycAdapter(List<Pojo> pojoArrayList) {
this.pojoArrayList = pojoArrayList;
}
@NonNull
@Override
public RecycViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View v = inflater.inflate(R.layout.item_layout, parent, false);
return new RecycViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull RecycViewHolder holder, int position) {
Pojo pojo = pojoArrayList.get(position);
holder.textView1.setText(pojo.getText1());
holder.textView2.setText(pojo.getText2());
}
@Override
public int getItemCount() {
return pojoArrayList.size();
}
}
ViewHolder 代码添加为 well.Not 确定 viewHolder 实现是否有问题。
public class RecycViewHolder extends RecyclerView.ViewHolder {
public TextView textView1, textView2;
public RecycViewHolder(View itemView) {
super(itemView);
this.textView1 = itemView.findViewById(R.id.textvie1);
this.textView2 = itemView.findViewById(R.id.textvie2);
}
}
每个选项卡下的输出都没有。 有人可以帮我看看我错在哪里吗
您需要将 RecyclerView 填充到 ViewPager 的每个页面中,换句话说,将此代码放在 "instantiateItem" 方法中:
recyclerView = view.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
pojoList.add(new Pojo("Random field 1", "Random field 1"));
recyclerView.setAdapter(new RecycAdapter(pojoList));
为什么你的 MainActivity
上有代码块?
recyclerView = view.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
pojoList.add(new Pojo("Random field 1", "Random field 1"));
recyclerView.setAdapter(new RecycAdapter(pojoList));
}
我可以看到一些冲突 R.id.recyclerView
。
如果您希望 ViewPager 在每个选项卡上显示两个不同的 RecyclerViews
,那么您的 MainActivity
应该只有视图的容器。您能否就您需要实现的目标提供更多背景信息?
您是否尝试过在每个选项卡上显示一个简单且不同的 TextView
/布局?您可能有一些 XML 问题。
最后,找到了一个解决方案,覆盖的方法 isViewFromObject 早些时候返回了 false,这导致了在更改为下面的代码时出现问题,一切正常。
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}