java - 启动时清空 RecyclerView,然后通过 onclick 监听器在其上添加项目

标签 java android android-recyclerview

问题是,当我将示例列表设置为空时,空指针就会启动。我想要的只是在空的 recyclerview 中启动我的应用程序,然后当我单击按钮添加到列表时,我将添加和添加项目。

我尝试了这段代码:

@Override
    public int getItemCount() {
        if (mExampleList == null)
            return 0;
        else
            return  mExampleList.size();
    }

但是当我添加项目时出现错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'void java.util.ArrayList.add(int, java.lang.Object)' on a null object reference
                      at com.example.admin.test3.MainScreen.insertItem(MainScreen.java:63)
                      at com.example.admin.test3.MainScreen$1.onClick(MainScreen.java:44)

主屏幕java代码

package com.example.admin.test3;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.Editable;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import java.util.ArrayList;

public class MainScreen extends AppCompatActivity {

    private ArrayList<ExampleItem> mExampleList;

    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;

    private Button buttonInsert;
    private Button buttonRemove;
    private EditText textAmount;
    private EditText textDetail;


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

    //    createExampleList();
        buildRecyclerView();

        buttonInsert = findViewById(R.id.buttonInsert);
        buttonRemove = findViewById(R.id.buttonRemove);
        textAmount = findViewById(R.id.textInsert);
        textDetail = findViewById(R.id.textRemove);

        buttonInsert.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                insertItem();
            }
        });

        buttonRemove.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               // int position = Integer.parseInt(textRemove.getText().toString());
                removeItem();
            }
        });

    }

    public void insertItem()
    {
        String amount = String.valueOf(textAmount.getText());
        String details = String.valueOf((textDetail.getText()));

        mExampleList.add(0, new ExampleItem(R.drawable.entertainment, "Entertainment", details, "₱ " + amount));
        mAdapter.notifyDataSetChanged();
    }

    public void removeItem()
    {
        //mExampleList.remove(position);
       // mAdapter.notifyItemRemoved(position);
    }

    public void createExampleList()
    {
        mExampleList = new ArrayList <>();
        mExampleList.add(new ExampleItem(R.drawable.ic_library_add_black_24dp, "", "", "ADD EXPENSES"));
    }

    public void buildRecyclerView()
    {
        mRecyclerView = findViewById(R.id.recyclerView);
        mRecyclerView.setHasFixedSize(true);
        mLayoutManager = new LinearLayoutManager(this);
        mAdapter = new ExampleAdapter(mExampleList);

        mRecyclerView.setLayoutManager(mLayoutManager);
        mRecyclerView.setAdapter(mAdapter);


    }
}

回收器 View java代码的示例适配器

package com.example.admin.test3;

import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;

public class ExampleAdapter extends RecyclerView.Adapter<ExampleAdapter.ExampleViewHolder> {

    private ArrayList<ExampleItem> mExampleList;


    public static class ExampleViewHolder extends RecyclerView.ViewHolder
    {

        public ImageView mImageView;
        public TextView mLabel;
        public TextView mDetails;
        public TextView mAmount;

        public ExampleViewHolder(View itemView) {
            super(itemView);

            mImageView = itemView.findViewById(R.id.imageIcon);
            mLabel = itemView.findViewById(R.id.textLabel);
            mDetails = itemView.findViewById(R.id.textDetails);
            mAmount = itemView.findViewById(R.id.textAmount);
        }
    }

    public ExampleAdapter(ArrayList<ExampleItem> exampleList)
    {
        mExampleList = exampleList;
    }

    @NonNull
    @Override
    public ExampleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.example_item, parent, false);
        ExampleViewHolder evh = new ExampleViewHolder(view);
        return evh;
    }

    @Override
    public void onBindViewHolder(@NonNull ExampleViewHolder holder, int position) {
        ExampleItem currentItem = mExampleList.get(position);

        holder.mImageView.setImageResource(currentItem.getmImageResource());
        holder.mLabel.setText(currentItem.getMlabel());
        holder.mDetails.setText(currentItem.getMdetails());
        holder.mAmount.setText(currentItem.getMamount());
    }

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

项目 java 代码示例

package com.example.admin.test3;

public class ExampleItem {

    private int mImageResource;
    private String mlabel;
    private String mdetails;
    private String mamount;

    public ExampleItem(int imageResource, String label, String details, String amount)
    {
        mImageResource = imageResource;
        mlabel = label;
        mdetails = details;
        mamount = amount;
    }

    public int getmImageResource()
    {
        return mImageResource;
    }

    public String getMlabel() {
        return mlabel;
    }

    public String getMdetails() {
        return mdetails;
    }

    public String getMamount() {
        return mamount;
    }


}

主屏幕 XML 代码

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fillViewport="true">

    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <View
            android:id="@+id/view"
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:background="#77dd77" />

        <TextView
            android:id="@+id/textView8"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="4dp"
            android:text="Pocket"
            android:textColor="#b4ecb4"
            android:textSize="18dp"
            android:textStyle="bold"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/textView10"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="8dp"
            android:text="Budget"
            android:textColor="#03c03c "
            android:textSize="18dp"
            android:textStyle="bold"
            app:layout_constraintBottom_toBottomOf="@+id/textView8"
            app:layout_constraintStart_toEndOf="@+id/textView8"
            app:layout_constraintTop_toTopOf="@+id/textView8"
            app:layout_constraintVertical_bias="0.0" />

        <TextView
            android:id="@+id/textView9"
            android:layout_width="138dp"
            android:layout_height="wrap_content"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="3dp"
            android:gravity="center"
            android:shadowColor="#808080"
            android:shadowDx="1"
            android:shadowDy="1"
            android:shadowRadius="2"
            android:text="January"
            android:textColor="#FEFEFE"
            android:textSize="26dp"
            android:textStyle="bold"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/textView10" />

        <View
            android:id="@+id/view4"
            android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_marginEnd="25dp"
            android:layout_marginStart="25dp"
            android:layout_marginTop="3dp"
            android:background="#50fefefe"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/view2" />

        <View
            android:id="@+id/view2"

            android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_marginEnd="25dp"
            android:layout_marginStart="25dp"
            android:layout_marginTop="8dp"
            android:background="#62fefefe"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/textView9" />

        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="8dp"
            android:layout_marginStart="10dp"
            android:layout_marginTop="8dp"
            android:text="Expense"
            android:textAllCaps="true"
            android:textColor="#fefefe"
            android:textSize="12dp"
            app:layout_constraintBottom_toBottomOf="@+id/view4"
            app:layout_constraintStart_toStartOf="@+id/view4"
            app:layout_constraintTop_toTopOf="@+id/view4" />

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="8dp"
            android:layout_marginStart="10dp"
            android:layout_marginTop="8dp"
            android:text="Income"
            android:textAllCaps="true"
            android:textColor="#fefefe"
            android:textSize="12dp"
            app:layout_constraintBottom_toBottomOf="@+id/view2"
            app:layout_constraintStart_toStartOf="@+id/view2"
            app:layout_constraintTop_toTopOf="@+id/view2" />

        <TextView
            android:id="@+id/expnsAmount"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_marginBottom="8dp"
            android:layout_marginEnd="10dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:autoSizeTextType="uniform"
            android:gravity="right"
            android:hint="₱ 0"
            android:text="₱ 0"
            android:textColor="#fefefe"
            android:textColorHint="#fefefe"
            android:textStyle="bold"
            app:layout_constraintBottom_toBottomOf="@+id/view4"
            app:layout_constraintEnd_toEndOf="@+id/view4"
            app:layout_constraintStart_toEndOf="@+id/textView3"
            app:layout_constraintTop_toTopOf="@+id/view4" />

        <TextView
            android:id="@+id/incmeAmount"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_marginBottom="8dp"
            android:layout_marginEnd="10dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:autoSizeTextType="uniform"
            android:gravity="right"
            android:hint="₱ 0"
            android:text="₱ 0"
            android:textColor="#fefefe"
            android:textColorHint="#fefefe"
            android:textStyle="bold"
            app:layout_constraintBottom_toBottomOf="@+id/view2"
            app:layout_constraintEnd_toEndOf="@+id/view2"
            app:layout_constraintStart_toEndOf="@+id/textView"
            app:layout_constraintTop_toTopOf="@+id/view2" />

        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:text="Balance"
            android:textAllCaps="true"
            android:textColor="#696969"
            android:textSize="15dp"
            app:layout_constraintBottom_toBottomOf="@+id/textView17"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/view" />

        <TextView
            android:id="@+id/textView17"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginEnd="10dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:gravity="right"
            android:text="₱ 0"
            android:textColor="#77dd77"
            android:textSize="23dp"
            android:textStyle="bold"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/textView4"
            app:layout_constraintTop_toBottomOf="@+id/view" />

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginBottom="150dp"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="10dp"
            android:padding="4dp"
            android:scrollbars="vertical"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/textView17">

        </android.support.v7.widget.RecyclerView>

        <EditText
            android:hint="amount"
            android:id="@+id/textInsert"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:inputType="number"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/recyclerView" />

        <Button
            android:id="@+id/buttonInsert"
            android:layout_width="143dp"
            android:layout_height="0dp"
            android:layout_marginBottom="8dp"
            android:layout_marginStart="8dp"
            android:text="Insert"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/textRemove" />

        <EditText
            android:hint="details"
            android:id="@+id/textRemove"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/textInsert" />

        <Button
            android:id="@+id/buttonRemove"
            android:layout_width="130dp"
            android:layout_height="0dp"
            android:layout_marginBottom="8dp"
            android:layout_marginEnd="44dp"
            android:text="Remove"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/textRemove" />

    </android.support.constraint.ConstraintLayout>


</ScrollView>

我想做的是,当我启动应用程序时,recyclerview 是空的,当我将项目添加到空的 recyclerview 时,将添加一个项目,不会出现错误

最佳答案

onCreate 中取消注释 createExampleList(); 因为您已在其中实例化了 mExampleList 并且由于注释而它为空

或者如果您想要空而不是在 onCreate 中实例化 ArrayList

mExampleList = new ArrayList <>();

关于java - 启动时清空 RecyclerView,然后通过 onclick 监听器在其上添加项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54632129/

相关文章:

java - Android:如何将我的 Android 模拟器连接到互联网?

java - 从模拟的 SSH 服务器(Apache MINA)收集命令响应

java - 两次异步操作后更新 UI

android - PhoneGap 链接到 Google Play

java - 在 RecyclerView 的 onBindViewHolder 方法中将文本设置为 EditText 时出错

java - 仅当 SonarQube 服务器在线时才对 Jenkins 执行 SonarQube 分析

android - 使用 Facebook 的访问 token 通过经过身份验证的用户 session 在 UIWebView 中显示粉丝页面

android - 共享过渡动画故障

android - 如何使用 RecyclerView 在 ListView 中更改播放/暂停音频图标?

android - 带有 BottomSheetBehaviour 的 MotionLayout 中的 RecyclerView 不会在触摸 RecyclerView 时滚动