【问题标题】:Unable to inflate a recyclerView in ViewPager无法在 ViewPager 中为 recyclerView 充气
【发布时间】:2018-05-24 15:52:43
【问题描述】:

我无法在 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";
}

RecycAdapter 代码:

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 代码。不确定 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);
    }
}

每个选项卡下的输出都没有。 有人可以帮我看看我哪里出错了

【问题讨论】:

  • 您可以添加您的RecycAdapter 代码吗?
  • 添加了 RecycAdapter 的代码
  • 这就是你的ViewPager 代码吗?
  • 添加了整个 viewPager 代码

标签: android android-recyclerview android-viewpager android-tablayout recyclerview-layout


【解决方案1】:

为什么你的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/Layout?您可能会遇到一些 XML 问题。

【讨论】:

  • 是的,你是对的,很抱歉造成混乱,我已经从 MainActivity 中删除了那段代码(我正在尝试其他东西并在两个地方添加它作为尝试)。唯一的地方recyclerView 现在在 ViewPagerAdapter 内已经膨胀。但我什至无法在 viewpager 内膨胀布局。下面是代码:LayoutInflater layoutInflater=LayoutInflater.from(container.getContext());查看视图 = layoutInflater.inflate(R.layout.item_layout, container, false);容器.addView(视图);返回视图;
  • 好的,所以您的错误在 XML 中。您可能应该阅读一些如何设置的教程,它可能比您想象的要容易,还可以在问题中添加任何相关代码:)
【解决方案2】:

你需要将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));

【讨论】:

  • 试过了,还是一样。
【解决方案3】:

最后,找到了一个解决方案,被覆盖的方法 isViewFromObject 早些时候返回 false,这导致在更改为以下代码时出现问题,一切正常。

@Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view == object;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多