当我按下返回时,如何刷新 recyclerview 项目?

Posted

技术标签:

【中文标题】当我按下返回时,如何刷新 recyclerview 项目?【英文标题】:How can I refresh recylverview item when i press back? 【发布时间】:2020-11-09 00:48:55 【问题描述】:

我想创建一个喜欢做的应用程序列表。所以创建了一个DatabaseHelper 类。它包含 DataAddDisplayDatafunction 。 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));
            
        
    



【问题讨论】:

【参考方案1】:

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

所以,要添加整个数据,你可以这样做

@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);


【讨论】:

【参考方案2】:

保存数据后添加一行

adapter.notifyDataSetChanged();

在 MainActivity 中添加这一行

@Override
protected void onResume() 
    super.onResume();
    recyclerView.notify();

【讨论】:

以上是关于当我按下返回时,如何刷新 recyclerview 项目?的主要内容,如果未能解决你的问题,请参考以下文章

当我按下购物车按钮时,我的应用程序崩溃了

Flutter中如何返回刷新上一页?

当我按下返回按钮时应用程序没有响应

为啥当我按下返回按钮时我的程序崩溃

在 webview 上刷新标签栏项目

保存后如何返回上一个控制器并刷新该控制器