如何在对SQLite数据库进行一些更改后刷新回收器视图



我的应用程序在片段中有回收器视图,当我单击回收器视图中的列表之一时,在下一页上,有一个检查按钮,我可以更新sqlite数据库上的值。通过此更新,我可以更改回收器视图列表的顺序。由于sqlite数据库不像firebase addlistener。它不能立即刷新数据库。 当我单击返回按钮转到回收器视图页面时,有什么方法可以立即刷新回收器视图列表? 我用谷歌搜索并发现了一些类似的问题,但我无法解决我的问题。任何帮助将不胜感激。

package com.donghyouny.biblecard;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;

import java.util.ArrayList;
public class BibleAdapter extends RecyclerView.Adapter<BibleAdapter.BibleViewHolder> {
private  ArrayList<Bible> arrayList;
private  Context context;
private OnVerseItemClickListener listener;

public BibleAdapter(ArrayList<Bible> arrayList, Context context) {
this.arrayList = arrayList;
this.context = context;
}
public void setOnItemClickListener(OnVerseItemClickListener listener){
this.listener = listener;
}

@NonNull
@Override
public BibleAdapter.BibleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.verse_item, parent, false);
BibleViewHolder holder = new BibleViewHolder(view, listener);
return holder;
}
@Override
public void onBindViewHolder(@NonNull BibleAdapter.BibleViewHolder holder, int position) {
/* RequestOptions reqOpt = RequestOptions
.fitCenterTransform()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.override(140,100);

.apply(reqOpt)
*/
Glide.with(holder.imageView)
.load(arrayList.get(position).getImage())
.transition(DrawableTransitionOptions.withCrossFade())
.into(holder.imageView);
//Glide.with(PersonInfoActivity.this).load(R.drawable.standard_profile).apply(new RequestOptions().centerCrop()).into(imageView);
// holder.imageView.setImageResource(R.drawable.church);

holder.bibleType.setText(arrayList.get(position).getBibleType());
holder.content.setText(arrayList.get(position).getContent());
holder.verse.setText(arrayList.get(position).getVerse());

}
@Override
public int getItemCount() {
return (arrayList!=null? arrayList.size():0);
}

public void setList(ArrayList<Bible> list ) { this.arrayList = list; }



public class BibleViewHolder extends RecyclerView.ViewHolder{
ImageView imageView;
TextView bibleType;
TextView verse;
TextView content;
ImageView save;
public BibleViewHolder(@NonNull View itemView, final OnVerseItemClickListener listener) {
super(itemView);
this.imageView = itemView.findViewById(R.id.imageView);
this.bibleType = itemView.findViewById(R.id.bibleType);
this.content = itemView.findViewById(R.id.content);
this.verse = itemView.findViewById(R.id.verse);
this.save = itemView.findViewById(R.id.save);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition();
if(listener != null){
listener.onItemClick(BibleViewHolder.this, v, position);
}
}
});
}

}
}
Cursor readAllData(String value){
Log.d("readData", "test");
String query = "select Id,BibleType, Verse, Content, Num, CNum, CheckNum, Image, datetime(TimeStamp) as MyDate  from bible where CNum=" + "(select Id from category where CategoryName='" + value + "') order by TimeStamp asc";
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = null;
if(db != null){
Log.d("readData1","test");
cursor = db.rawQuery(query, null);
}
return cursor;
}
void updateData(Bible bible){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
String id = String.valueOf(bible.getId());
cv.put(COLUMN_TIMESTAMP, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
long result = db.update(TABLE_BIBLE, cv, "Id=?", new String[]{id});
if(result == -1){
}else {
Log.d("update", "success")
}
}
package com.donghyouny.biblecard;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;

import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.InterstitialAd;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collections;
import static com.donghyouny.biblecard.SplashActivity.ROOT_DIR;

public class Fragment1 extends Fragment {
public static final String VERSE_DATA = "data";
public static final int REQUEST_CODE = 101;
private RecyclerView recyclerView;
private BibleAdapter adapter;
private LinearLayoutManager mLayoutManager; //for sorting
private ArrayList<Bible> bList = new ArrayList<>();
private Connection conn;
private Statement stmt;
private ResultSet rs, rs2;
private Bible bible;
private String value;
private InterstitialAd mInterstitialAd;
public Fragment1(String value) {
this.value = value;
}
public Fragment1(){
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
final ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_1, container, false);
conn = Utiles.dbConnection();

MyDatabaseHelper myDB = new MyDatabaseHelper(getActivity());
Cursor cursor = myDB.readAllData(value);
while(cursor.moveToNext()){
bible = new Bible();
Log.d("cursorid", String.valueOf(cursor.getInt(0)));
bible.setId(cursor.getInt(0));
bible.setBibleType(cursor.getString(1));
bible.setVerse(cursor.getString(2));
bible.setContent(cursor.getString(3));
bible.setNum(cursor.getInt(4));
bible.setCnum(cursor.getInt(5));
bible.setCheckNum(cursor.getInt(6));
bible.setImage(cursor.getBlob(7));
bible.setTimestamp(cursor.getString(8));
bList.add(bible);
}
Log.d("blist", bList.toString());
recyclerView = rootView.findViewById(R.id.recyclerView);
//recyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(getContext());
recyclerView.setLayoutManager(mLayoutManager);
adapter = new BibleAdapter(bList, getContext());
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();

adapter.setOnItemClickListener(new OnVerseItemClickListener() {
@Override
public void onItemClick(BibleAdapter.BibleViewHolder holder, View view, final int position) {     //Toast.makeText(getContext(), "num"+adapter.getItemCount(), Toast.LENGTH_LONG).show();
if(mInterstitialAd.isLoaded()) {
// Step 1: Display the interstitial
mInterstitialAd.show();
// Step 2: Attach an AdListener
mInterstitialAd.setAdListener(new AdListener() {
@Override
public void onAdClosed() {
Intent intent = new Intent(getContext(), VerseActivity.class);
Log.d("bible33", bList.get(position).toString());
intent.putExtra("bible", bList.get(position));
intent.putExtra("category", value);
Log.d("bibleIntent", bible.toString());
startActivityForResult(intent, 1);
}
});
}else{
Intent intent = new Intent(getContext(), VerseActivity.class);
Log.d("bible33", bList.get(position).toString());
intent.putExtra("bible", bList.get(position));
intent.putExtra("category", value);
Log.d("bibleIntent", bible.toString());
startActivityForResult(intent, 1);
}

}
});

setHasOptionsMenu(true);
return rootView;
}


@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
inflater.inflate(R.menu.actionbar_actions, menu);
}

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.save_folder:
Intent intent = new Intent(getContext(), SaveActivity.class);
startActivityForResult(intent, REQUEST_CODE);
return true;

}
return super.onOptionsItemSelected(item);
}

}
}
package com.donghyouny.biblecard;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.FragmentTransaction;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.database.Cursor;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
import com.bumptech.glide.request.RequestOptions;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.MobileAds;
import com.google.android.gms.ads.initialization.InitializationStatus;
import com.google.android.gms.ads.initialization.OnInitializationCompleteListener;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import static com.donghyouny.biblecard.SplashActivity.ROOT_DIR;
public class VerseActivity extends AppCompatActivity {
private ImageView imageView;
private TextView bibleType;
private TextView verse;
private TextView content;
public Bible bible;
private ImageView save, check;

private String category;
private Toolbar toolbar;
private Statement stmt;
private ResultSet rs;
private SharedPreferences checkDialog;
private SharedPreferences saveDialog;
private SharedPreferences shareDialog;
private AdView mAdView;
private boolean flag=true;
private Fragment1 fragment1;
@SuppressLint("SourceLockedOrientationActivity")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.activity_verse);
MobileAds.initialize(this, new OnInitializationCompleteListener() {
@Override
public void onInitializationComplete(InitializationStatus initializationStatus) {
}
});
mAdView = findViewById(R.id.adbanner);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
fragment1 = new Fragment1();
bibleType = findViewById(R.id.bibleType);
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

verse = findViewById(R.id.verse);
content = findViewById(R.id.content);
imageView = findViewById(R.id.imageView);
save = findViewById(R.id.save);
check = findViewById(R.id.check);
//   category = findViewById(R.id.category);
//key = getIntent().getStringExtra("key");
if((getIntent().getParcelableExtra("bible")!=null)&& (getIntent().getStringExtra("category")!=null)){
Log.d("nocard", "Test");
bible = getIntent().getParcelableExtra("bible");
category = getIntent().getStringExtra("category");
Log.d("!!!bible", bible.toString());

display();

}else if((getIntent().getParcelableExtra("cardBible")!=null)&& (getIntent().getStringExtra("cName")!=null)){
Log.d("cardop", "test");
check.setVisibility(View.INVISIBLE);
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams)save.getLayoutParams();
//lp.rightMargin=0;
lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT,0);
lp.addRule(RelativeLayout.CENTER_HORIZONTAL);
save.setLayoutParams(lp);
bible = getIntent().getParcelableExtra("cardBible");
//Log.d("bible.key", bible.getKey());
category = getIntent().getStringExtra("cName");
display();
}


check.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
checkDialog = getSharedPreferences("checkDialog", MODE_PRIVATE);
boolean isFirstTime = checkDialog.getBoolean("firstTime", true);
if (isFirstTime) {
checkDialogPopup();
} else {
checkMethod(bible);
}
}
});
}
private void checkMethod(Bible bible) {
MyDatabaseHelper db = new MyDatabaseHelper(VerseActivity.this);
db.updateData(bible);
}
private void checkDialogPopup() {
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.AlertDialogCustom);
builder.setTitle("Check button");
builder.setMessage("You can not undo this button");
builder.setPositiveButton("예",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(),"You click 'yes'",Toast.LENGTH_LONG).show();
checkMethod(bible);
}
});
builder.setNegativeButton("Don't show this message",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
SharedPreferences.Editor editor = checkDialog.edit();
editor.putBoolean("firstTime", false);
editor.commit();
Toast.makeText(getApplicationContext(),"Don't want to see this message",Toast.LENGTH_LONG).show();
}
});
builder.show();
}


double getScreenInches() {
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
int height = dm.heightPixels;
double wi = (double) width / (double) dm.xdpi;
double hi = (double) height / (double) dm.ydpi;
double x = Math.pow(wi, 2);
double y = Math.pow(hi, 2);
double screenInches = Math.sqrt(x + y);
return screenInches;
}
private void display(){
DisplayMetrics metrics = new DisplayMetrics();
WindowManager windowManager = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
windowManager.getDefaultDisplay().getMetrics(metrics);
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) imageView.getLayoutParams();
params.width = metrics.widthPixels;
params.height = (int)(metrics.heightPixels/2.8);
Log.d("width", String.valueOf(params.width));
Log.d("height", String.valueOf(params.height));
imageView.setLayoutParams(params);

Glide.with(getApplicationContext()).load(bible.getImage()).apply(new RequestOptions().centerCrop()).into(imageView);
//imageView.setImageResource(R.drawable.church);
bibleType.setText(bible.getBibleType().toString());
verse.setText(bible.getVerse().toString());
content.setText(bible.getContent().toString());
Log.d("content", bible.getContent().toString());
int inch = (int)( getScreenInches()+0.5 );
Log.d("inch", String.valueOf(3*inch));
//content.setTextSize(3*inch);
toolbar.setTitle(category);



}

}

您可以从数据库中获取数据,并在单独的函数中列出进程。 您可以在 onResume(( 方法中调用此函数。我认为你应该研究机器人的生命周期。参考链接是 : https://developer.android.com/guide/components/activities/activity-lifecycle

根据文档中的定义

onResume(( :当活动进入 Resume 状态时,它会进入前台,然后系统调用 onResume(( 回调。这是应用与用户交互的状态。应用将保持此状态,直到发生某些事情将焦点从应用中移开。例如,此类事件可能是接到电话呼叫、用户导航到另一个活动或设备屏幕关闭。

例如:

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
final ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_1, container, false);
conn = Utiles.dbConnection();
recyclerView = rootView.findViewById(R.id.recyclerView);
//recyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(getContext());
recyclerView.setLayoutManager(mLayoutManager);
adapter = new BibleAdapter(bList, getContext());
recyclerView.setAdapter(adapter);

adapter.setOnItemClickListener(new OnVerseItemClickListener() {
@Override
public void onItemClick(BibleAdapter.BibleViewHolder holder, View view, final int position) {     //Toast.makeText(getContext(), "num"+adapter.getItemCount(), Toast.LENGTH_LONG).show();
if(mInterstitialAd.isLoaded()) {
// Step 1: Display the interstitial
mInterstitialAd.show();
// Step 2: Attach an AdListener
mInterstitialAd.setAdListener(new AdListener() {
@Override
public void onAdClosed() {
Intent intent = new Intent(getContext(), VerseActivity.class);
Log.d("bible33", bList.get(position).toString());
intent.putExtra("bible", bList.get(position));
intent.putExtra("category", value);
Log.d("bibleIntent", bible.toString());
startActivityForResult(intent, 1);
}
});
}else{
Intent intent = new Intent(getContext(), VerseActivity.class);
Log.d("bible33", bList.get(position).toString());
intent.putExtra("bible", bList.get(position));
intent.putExtra("category", value);
Log.d("bibleIntent", bible.toString());
startActivityForResult(intent, 1);
}

}
});

setHasOptionsMenu(true);
return rootView;

}

public void fetchDataFromSqliteDatabase() {
MyDatabaseHelper myDB = new MyDatabaseHelper(getActivity());
Cursor cursor = myDB.readAllData(value);
while(cursor.moveToNext()){
bible = new Bible();
Log.d("cursorid", String.valueOf(cursor.getInt(0)));
bible.setId(cursor.getInt(0));
bible.setBibleType(cursor.getString(1));
bible.setVerse(cursor.getString(2));
bible.setContent(cursor.getString(3));
bible.setNum(cursor.getInt(4));
bible.setCnum(cursor.getInt(5));
bible.setCheckNum(cursor.getInt(6));
bible.setImage(cursor.getBlob(7));
bible.setTimestamp(cursor.getString(8));
bList.add(bible);
}
adapter.setList(bList);
adapter.notifyDataSetChanged();
}

然后你可以从onResume((调用它

@Override
public void onResume() {
super.onResume();
fetchDataFromSqliteDatabase();
}

此外,还应创建一个名为 setList 的新方法。 应为此方法提供一个列表作为参数。

最新更新