java - Android:RecyclerView.SetAdapter 导致应用程序崩溃,但没有明显错误

标签 java android android-recyclerview

我们在项目中实现 RecyclerView 已经有一段时间了,虽然后端看起来工作得很好,但只要我调用 recyclerView.setAdapter 就会导致程序崩溃。我花了几个小时仔细研究这个程序,但一无所获,尽管我怀疑答案在于适配器。有人能解释一下吗?

创建并设置适配器:

mLayoutManager = new LinearLayoutManager(this);
mRecyclerView = findViewById(R.id.navRV);
mRecyclerView.setHasFixedSize(false);
mRecyclerView.setLayoutManager(mLayoutManager);
Date todaysDate = new Date(System.currentTimeMillis());
AnnouncementList.add("Test Announcement 1", "This is some random text in the body" +
        ". It really needs to show up correctly!!", todaysDate);
mAdapter = new TwitterAdapter(mContext);
mRecyclerView.setAdapter(mAdapter);

这是适配器:

package com.company.application;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

/**
 * Twitter Adapter:
 * This adapter is the interface between the data and the view
 */
public class TwitterAdapter extends RecyclerView.Adapter<TwitterAdapter.ViewHolder> {
    //Use this as the tag for logging in this activity
    final private String LOGTAG = "TWITTER_ADAPTER";
    private Context mContext;

    public TwitterAdapter(Context mContext) {
        this.mContext = mContext;
    }

    @NonNull
    @Override
    public TwitterAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(mContext);
        View view = inflater.inflate(R.layout.list_layout, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull TwitterAdapter.ViewHolder holder, int position) {
        //Set the text and the title

        holder.textViewBody.setText((String)AnnouncementList.getList().get(position).getBody());
        holder.textViewTitle.setText((String)AnnouncementList.getList().get(position).getTitle());
        //If we have an image, insert it so we can draw it
        if(AnnouncementList.getList().get(position).getImage() != null)
            holder.imageView.setImageDrawable((Drawable)AnnouncementList.getList().get(position).getImage());
        else
            holder.imageView.setImageDrawable(null);
    }

    @Override
    public int getItemCount() {
        Log.d(LOGTAG, "getItemCount returns " + AnnouncementList.size());
        return AnnouncementList.size();
    }

    /**
     * Holds the view so that the RecyclerView can process it
     */
    public static class ViewHolder extends RecyclerView.ViewHolder {
        public TextView mTextView;
        public RelativeLayout mRelativeLayout;
        ImageView imageView;
        TextView textViewTitle, textViewBody, textViewDate;
        public ViewHolder(View itemView) {
            super(itemView);

            imageView = itemView.findViewById(R.id.imageView);
            textViewTitle = itemView.findViewById(R.id.textViewTitle);
            textViewBody = itemView.findViewById(R.id.textViewBody);
//            textViewDate = itemView.findViewById(R.id.textViewDate);
        }
    }
}

最佳答案

您需要像这样将arraylist传递给适配器

mAdapter = new TwitterAdapter(mContext, AnnouncementList);

然后在适配器中像这样更改构造函数

private Context mContext;
private ArrayList<ModelClass> mAnnouncementList = new ArrayList();

public TwitterAdapter(Context mContext,ArrayList<ModelClass> mAnnouncementList) {
    this.mContext = mContext;
    this.mAnnouncementList= mAnnouncementList;
}

然后像这样访问变量

holder.textViewBody.setText(mAnnouncementList.getList().get(position).getBody());
    holder.textViewTitle.setText(mAnnouncementList.getList().get(position).getTitle());

不要忘记返回如下所示的尺寸

@Override
public int getItemCount() {
    Log.d(LOGTAG, "getItemCount returns " + mAnnouncementList.size());
    return mAnnouncementList.size();
}

关于java - Android:RecyclerView.SetAdapter 导致应用程序崩溃,但没有明显错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51228263/

相关文章:

android - 更好的做法 : reusing RecyclerViewAdapter or separate instance for each?

java - servlet 是编写 Java Web 应用程序的唯一方法吗

java - 如何在json改造的根部使用可变键解析json

java - JpaRepository findAll 返回空列表

android - 在自定义 Android 中如何覆盖 STREAM_RING 作为响应音量按钮的默认 AudioService

安卓.view.InflateException : Binary XML file line #11

java - 如何将第 3 方库添加到 Android AOSP 构建中?

java - 匹配一个或多个 char a 或仅匹配 char b 之一的正则表达式

java - 为什么我的 RecyclerView 显示 CardView 项目的顺序不正确?

android - 如何更改 recyclerview 中某些项目的 View 背景?