按回键时如何刷新 recyclerview 项目?
How can I refresh recylverview item when i press back?
我想创建一个应用程序待办事项列表。于是创建了DatabaseHelper
Class。它包含 DataAdd
和 DisplayData
function 。 MainActivity 中有recyclerView object 用于查看所有存储的数据。我的功能正在运行,但是当我保存新数据并按下后退按钮时,它保存但不显示在 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));
}
}
}
}
保存数据后添加行
adapter.notifyDataSetChanged();
在 MainActivity 中添加这一行
@Override
protected void onResume() {
super.onResume();
recyclerView.notify();
}
您需要在 onResume()
中再次获取数据,因为当您从 AddActivity
返回 return 时,不会调用 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);
}
我想创建一个应用程序待办事项列表。于是创建了DatabaseHelper
Class。它包含 DataAdd
和 DisplayData
function 。 MainActivity 中有recyclerView object 用于查看所有存储的数据。我的功能正在运行,但是当我保存新数据并按下后退按钮时,它保存但不显示在 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));
}
}
}
}
保存数据后添加行
adapter.notifyDataSetChanged();
在 MainActivity 中添加这一行
@Override
protected void onResume() {
super.onResume();
recyclerView.notify();
}
您需要在 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);
}