按下后如何刷新recylverview项目?

时间:2020-07-19 18:17:30

标签: android listview android-recyclerview android-sqlite

我想创建一个类似待办事项清单的应用。因此创建了一个DatabaseHelper类。它包含DataAddDisplayData函数。 MainActivity中有recyclerView对象,用于查看所有存储的数据。我的功能正在运行,但是当我保存新数据并按返回按钮时,其保存但不会在recyclerView上显示。当我再次保存新数据时,其显示。我想当我按onBackPressed时可以刷新recylerview。我该怎么办?

...

package com.tcoding.hangidersdenkacsorucozdum;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

import com.google.android.material.floatingactionbutton.FloatingActionButton;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    private RecyclerView rv ;
    private FloatingActionButton addButton ;
    DatabaseHelper db ;
    ArrayList<String> lessonId , lessonName , lessonSubject , solvedProblemCount ;
    CustomAdapter adapter ;

    private void init() {
        rv = (RecyclerView) findViewById(R.id.rv);
        addButton = (FloatingActionButton) findViewById(R.id.addButton);
        db = new DatabaseHelper(this);
        lessonId = new ArrayList<>();
        lessonName = new ArrayList<>();
        lessonSubject = new ArrayList<>();
        solvedProblemCount = new ArrayList<>();
        rv = findViewById(R.id.rv);
        adapter = new CustomAdapter(this , lessonId , lessonName , lessonSubject , solvedProblemCount);
        rv.setLayoutManager(new LinearLayoutManager(this));
        rv.setEnabled(true);
        rv.setAdapter(adapter);
    }

    @Override
    public void onBackPressed() {

    }

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

        addButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MainActivity.this,AddActivity.class));
            }
        });

        DisplayData();
    }

    void DisplayData(){

        Cursor c = db.showData();
        if(c.getCount() == 0){
            Toast.makeText(this, "Gösterilecek Veri Bulunamadı...", Toast.LENGTH_SHORT).show();
        } else {
            while(c.moveToNext()) {
                lessonId.add(c.getString(0));
                lessonName.add(c.getString(1));
                lessonSubject.add(c.getString(2));
                solvedProblemCount.add(c.getString(3));
            }
        }
    }
}


2 个答案:

答案 0 :(得分:1)

您需要在onResume()内再次获取数据,因为从onCreate()返回时将不会调用AddActivity

因此,要添加全部数据,您可以执行以下操作

@Override
protected void onResume() {
    super.onResume();
    DisplayData();
    adapter.notifyDataSetChanged();
}

或者,从性能角度来看,最好将最后插入的项目通知数据库。

@Override
protected void onResume() {
    super.onResume();
    Cursor c = db.showData();
    if(c.getCount() == 0){
        Toast.makeText(this, "Gösterilecek Veri Bulunamadı...", Toast.LENGTH_SHORT).show();
    } else {
        c.cursor.moveToLast()) 
        lessonId.add(c.getString(0));
        lessonName.add(c.getString(1));
        lessonSubject.add(c.getString(2));
        solvedProblemCount.add(c.getString(3));
    }
    adapter.notifyItemInserted(lessonId.getSize()-1);

}

答案 1 :(得分:0)

保存数据后添加行

adapter.notifyDataSetChanged();

在MainActivity中添加此行

@Override
protected void onResume() {
    super.onResume();
    recyclerView.notify();
}
相关问题