加载RecyclerView时Android模拟器崩溃

时间:2019-12-08 02:47:52

标签: java android android-recyclerview recycler-adapter

我正在尝试重新创建三星设备上的备忘录应用程序。该备忘录应用程序应该只创建标题和正文的备忘录,并将其显示在回收者视图或列表中。 每当我进入MainActivity时,我的应用程序就会崩溃

MainActivity.class

public class MainActivity extends AppCompatActivity
{
    ArrayList<Memo> memos;
    RecyclerView memoList;
    MemoAdapter memoAdapter;
    Button addMemo;


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

        memoList = findViewById(R.id.memoList);
        addMemo = findViewById(R.id.addMemo);
        memoAdapter = new MemoAdapter(this,memos);
        memoList.setAdapter(memoAdapter);
    }
}

备忘录类

public class Memo
{

    private String mtitle;
    private String mbody;
    public Memo(String title, String body)
    {
        mtitle = title;
        mbody = body;
    }

    public String getTitle()
    {
        return mtitle;
    }

    public void setTitle(String mtitle) {
        this.mtitle = mtitle;
    }

    public String getBody() {
        return mbody;
    }

    public void setBody(String mbody) {
        this.mbody = mbody;
    }
}

MemoAdapter.class

public class MemoAdapter extends RecyclerView.Adapter<MemoAdapter.ViewHolder>
{
    private Context context;
    private ArrayList<Memo> memo;

    public MemoAdapter(Context context, ArrayList<Memo> memo)
    {
        this.context = context;
        this.memo = memo;
    }

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

    @Override
    public void onBindViewHolder(@NonNull MemoAdapter.ViewHolder holder, int position)
    {
        holder.listitem.setText(memo.get(position).getTitle());
        /*holder.linearLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v)
            {
                TODO: open composeactivity to edit the text of this memo
            }
        });*/
    }

    @Override
    public int getItemCount() {
        return memo.size();
    }

    class ViewHolder extends RecyclerView.ViewHolder
    {
        private TextView listitem;
        private LinearLayout linearLayout;

        public ViewHolder(@NonNull View itemView)
        {
            super(itemView);
            listitem = itemView.findViewById(R.id.listItem);
            linearLayout = itemView.findViewById(R.id.LL);
        }
    }

感谢您的帮助,如果需要发布更多信息,请告诉我。

4 个答案:

答案 0 :(得分:0)

没有堆栈跟踪,很难说出实际的问题。但是根据您提到的代码,您没有在使用import React from 'react' import styled from 'styled-components' export default function App() { return ( {/* This button would render with the default styles from Button.tsx */} <Button>Button One</Button> {/* This button would render with extended styles, a blue background for example */} <Button>Button Two</Button> ) } 之前对其进行初始化。因此,可能是memos

NullPointerException

答案 1 :(得分:0)

将布局管理器设置为recyclerview。并尝试运行

<html lang="en">

答案 2 :(得分:0)

尝试在MemoAdapter类中为此行添加一些null检查失败安全条件。

holder.listitem.setText(memo.get(position).getTitle());

因为如果备忘录ArrayList为空,而您仍在尝试获取Title,则您将面临错误。因此,放置一个if条件,并检查其是否为空。

然后为RecyclerView设置一个布局管理器。检查是否可行。

如果再次遇到错误,请尝试从逻辑此处粘贴错误日志。我们可以从中清楚地了解这个问题。

谢谢,希望对您有所帮助。

答案 3 :(得分:0)

您初始化了memos吗?

ArrayList<Memo> memos;将是null,而memo.size();将得到NPE。