【问题标题】:RecyclerView not showing items. Adapter is not calledRecyclerView 不显示项目。不调用适配器
【发布时间】:2017-02-24 01:55:03
【问题描述】:

所以我确定我在某个地方犯了一些小错误,只是看不到它。但我只是想创建一个基本的 recyclerview 列表。但是,当我运行该应用程序时,没有显示任何内容,我输入了日志语句,发现适配器已创建但从未在其上调用任何内容(如 bindviewholder、createviewholder 或 getItemsize)。我不确定发生了什么。代码如下”

主活动:

public class MainActivity extends GvrActivity {
    private ArrayList<SampleItem> videos;
    private RecyclerView recyclerView;
    private SampleAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        intialization();

    }

    private void intialization() {
        Log.e("tree","mata intialized");
        videos = new ArrayList<>();
        videos.add(new SampleItem("http://vid1383.photobucket.com/albums/ah303/intellidev/congo_zpsrtmtey4l.mp4", "Adrian", 50, 100));
        Log.e("tree","video added");
        recyclerView = (RecyclerView) findViewById(R.id.recycle);
        adapter = new SampleAdapter(this, videos);
        recyclerView.setAdapter(adapter);
        Log.e("tree","intialization completed");
    }
}

适配器

public class SampleAdapter extends     RecyclerView.Adapter<SampleAdapter.ItemHolder> {
private Context context;
    private ArrayList<SampleItem> items;

    public SampleAdapter(Context context, ArrayList<SampleItem> videos) {

        this.context = context;
        this.items = videos;
        Log.e("tree","adapter created");
    }

    @Override
    public ItemHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.
                from(parent.getContext()).
                inflate(R.layout.video_item, parent, false);
        Log.e("tree","onCreateView Done");
        return new ItemHolder(itemView);
    }

    @Override
    public void onBindViewHolder(ItemHolder holder, int position) {
        Uri uri = Uri.parse(items.get(0).getVideoUrl());
        VrVideoView.Options options = new VrVideoView.Options();
        options.inputType = VrVideoView.Options.TYPE_STEREO_OVER_UNDER;
        try {
            holder.view.loadVideo(uri, options);
            holder.view.playVideo();
        } catch (IOException e) {
            Log.e("tree","onBindViewError " +e.getMessage());
        }
        holder.likes.setText(items.get(position).getNumOfLikes());
        holder.shares.setText(items.get(position).getNumOfShares());
        holder.profile.setText(items.get(position).getProfileName());
        Log.e("tree","onBindViewDone");

    }

    @Override
    public int getItemCount() {
        Log.e("tree","items size is "+items.size());
        return items.size();
    }

    class ItemHolder extends RecyclerView.ViewHolder {
        private VrVideoView view;
        private Button likes;
        private Button shares;
        private Button profile;

        public ItemHolder(View itemView) {
            // Stores the itemView in a public final member variable that can be used
            // to access the context from any ViewHolder instance.
            super(itemView);

            view = (VrVideoView) itemView.findViewById(R.id.video_view);
            likes = (Button) itemView.findViewById(R.id.likesButton);
            shares = (Button) itemView.findViewById(R.id.sharesButton);
            profile = (Button) itemView.findViewById(R.id.videoProfileButton);

        }

    }
}

【问题讨论】:

  • 您似乎错过了添加LayoutManager
  • 您可能应该将 LinearLayoutManager 附加到您的 RV
  • 试试这个答案stackoverflow.com/a/35802948/2144418recyclerView.setAdapter(adapter); recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
  • 顺便说一下问题中列出的视频很棒:)
  • 这会导致我的 CreateViewHolder 中出现空指针异常。尝试在空对象引用上调用 getContext

标签: java android android-recyclerview


【解决方案1】:

如果您想使用RecyclerView,您需要使用以下内容:

  • RecyclerView.Adapter - 处理数据收集并将其绑定到 视图

  • LayoutManager - 帮助定位项目

  • ItemAnimator - 帮助为常见操作的项目设置动画 例如添加或删除项目

item animator 是可选的,但是adapter 和 Layoutmanager 是必需的

您忘记添加布局管理器。这两行代码可能解决了你的问题

LinearLayoutManager llm = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(llm);

【讨论】:

  • 这会导致我的 CreateViewHolder 中出现空指针异常。尝试在空对象引用上调用 getContext
【解决方案2】:

试试这个答案

https://stackoverflow.com/a/35802948/2144418

recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

【讨论】:

    【解决方案3】:

    添加

    recyclerView.setLayoutManager(new LinearLayoutManager(context));
    

    在回收站视图初始化之后。如果要使用项目网格,也可以设置 GridLayoutManager。

    【讨论】:

    • 这会导致我的 CreateViewHolder 中出现空指针异常。尝试在空对象引用上调用 getContext
    • 使用 this.context 代替 parent.getContext()
    猜你喜欢
    • 2016-02-05
    • 2021-12-07
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多