创建在recyclerView中保存项目数量的TextView

时间:2018-08-31 22:40:54

标签: android android-recyclerview

我想做的是在recyclerView中检索项目数并将其显示为文本。我不断收到相同的错误,如下代码所示:

public class COM800s1 extends AppCompatActivity {

private FirebaseFirestore db = FirebaseFirestore.getInstance();
private CollectionReference attendanceRef = db.collection("Attendance");
private AttendanceAdapter adapter;
private TextView attendanceNumbers;



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



    FloatingActionButton floatingActionButton = findViewById(R.id.button_add_session);
    floatingActionButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(COM800s1.this,NewAttendanceRecord.class));
        }
    });

    setUpRecyclerView();



}

private void setUpRecyclerView() {
    final Query query = attendanceRef.whereEqualTo("sessionID", "5I0PLcpgmwdcjKLYLgkU").orderBy("userEmail", Query.Direction.ASCENDING);

    FirestoreRecyclerOptions<Attendance> options = new FirestoreRecyclerOptions.Builder<Attendance>()
            .setQuery(query, Attendance.class).build();


    adapter = new AttendanceAdapter(options);

    RecyclerView recyclerView = findViewById(R.id.recycler_view);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    recyclerView.setAdapter(adapter);

    attendanceNumbers = findViewById(R.id.attendanceNums);

    recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            int positionView = ((LinearLayoutManager)recyclerView.getLayoutManager()).findFirstVisibleItemPosition();
            attendanceNumbers.setText(Integer.toString(positionView)); //The TextView you want to update
        }
    });





   // attendanceNumbers.setText((adapter.getItemCount() + " students have attended this session"));


    new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0,
            ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
        @Override
        public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
            return false;
        }

        @Override
        public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
            adapter.deleteItem(viewHolder.getAdapterPosition());
        }
    }).attachToRecyclerView(recyclerView);

    adapter.setSetOnItemClickListener(new AttendanceAdapter.OnItemClickListener() {

        @Override
        public void onItemClick(Attendance documentSnapshot, int position) {

        }
    });

}

    @Override
    protected void onStart () {
        super.onStart();
        adapter.startListening();

    }

    @Override
    protected void onStop(){
        super.onStop();
        adapter.stopListening();
    }

}

这是我在logcat中收到的错误:

Process: com.dissertation.studentscanner, PID: 3781
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
        at com.dissertation.studentscanner.COM800s1$2.onScrolled(COM800s1.java:70)
        at android.support.v7.widget.RecyclerView.dispatchOnScrolled(RecyclerView.java:4840)
        at android.support.v7.widget.RecyclerView.dispatchLayoutStep3(RecyclerView.java:3909)
        at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3540)
        at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1767)
        at android.support.v7.widget.RecyclerView$1.run(RecyclerView.java:356)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
        at android.view.Choreographer.doCallbacks(Choreographer.java:723)
        at android.view.Choreographer.doFrame(Choreographer.java:655)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

2 个答案:

答案 0 :(得分:1)

在您的onCreate()方法中添加此行

attendanceNumbers = findViewById(R.id.yourTextViewIDhere); 

您缺少此功能,这就是在null pointer exception方法调用时显示setText()的方式

答案 1 :(得分:0)

代码中的错误是您未声明文本视图attendanceNumbers

您必须使用此行对其进行声明

attendanceNumbers = findViewById(R.id.YOUR_TEXTVIEW_ID_IN_XML_FILE); 

在调用此方法之前

setUpRecyclerView();

所以会是

 attendanceNumbers = findViewById(R.id.YOUR_TEXTVIEW_ID_IN_XML_FILE); 
    setUpRecyclerView();

快乐编码!