英文:
I just wanna update my activity automatically when i insert or delete data in SQLite using FAB button and Delete button
问题
以下是已翻译的内容:
这是 MainActivity 代码:
package com.example.booklibrary;
// ... (省略了导入语句)
public class MainActivity extends AppCompatActivity {
// ... (省略了一部分代码)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ... (省略了部分代码)
//method for showing data into UI
showDataToUi();
customAdapter = new customAdapter(this, book__id, book__title, book__author, book__pages);
recyclerView.setAdapter(customAdapter);
// ... (省略了部分代码)
}
// ... (省略了部分代码)
private void showDataToUi() {
Cursor cursor = myDatabaseClass.readAllData();
if (cursor.getCount() == 0) {
Toast.makeText(this, "No data", Toast.LENGTH_SHORT).show();
empty_textView.setVisibility(View.VISIBLE);
empty_image.setVisibility(View.VISIBLE);
} else {
while (cursor.moveToNext()) {
book__id.add(cursor.getString(0));
book__title.add(cursor.getString(1));
book__author.add(cursor.getString(2));
book__pages.add(cursor.getString(3));
}
empty_textView.setVisibility(View.GONE);
empty_image.setVisibility(View.GONE);
}
}
}
这是 myDatabase 类:
package com.example.booklibrary;
// ... (省略了导入语句)
public class myDatabaseClass extends SQLiteOpenHelper {
// ... (省略了一部分代码)
@Override
public void onCreate(SQLiteDatabase db) {
String query = "CREATE TABLE " + TABLE_NAME + " (" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ COLUMN_TITLE + " TEXT, " + COLUMN_AUTHOR + " TEXT, " + COLUMN_PAGES + " INTEGER);";
db.execSQL(query);
}
// ... (省略了部分代码)
//for showing the data to the UI
Cursor readAllData() {
String query = "SELECT * FROM " + TABLE_NAME;
SQLiteDatabase database = this.getReadableDatabase();
Cursor cursor = database.query(TABLE_NAME, null, null, null, null, null, COLUMN_ID);
if (database != null) {
cursor = database.rawQuery(query, null);
}
return cursor;
}
// ... (省略了部分代码)
}
这是我的 Adapter 类:
package com.example.booklibrary;
// ... (省略了导入语句)
public class customAdapter extends RecyclerView.Adapter<customAdapter.MyViewHolder> implements PopupMenu.OnMenuItemClickListener {
// ... (省略了一部分代码)
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(context);
View view = layoutInflater.inflate(R.layout.custom_adapter, null);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) {
holder.id.setText(book__id.get(position));
holder.title.setText(book__title.get(position));
holder.author.setText(book__author.get(position));
holder.pages.setText(book__pages.get(position));
holder.myLinerLayout.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
delete_id = book__id.get(position);
update_id = book__id.get(position);
update_title = book__title.get(position);
update_author = book__author.get(position);
update_pages = book__pages.get(position);
longClickMenu(v);
return true;
}
});
}
@Override
public int getItemCount() {
return book__id.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView id, title, author, pages;
RelativeLayout myLinerLayout;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
id = itemView.findViewById(R.id.item_id);
title = itemView.findViewById(R.id.item_title);
author = itemView.findViewById(R.id.item_AuthorName);
pages = itemView.findViewById(R.id.item_pages);
myLinerLayout = itemView.findViewById(R.id.item_linerLayout);
}
}
// ... (省略了部分代码)
}
英文:
and also when I delete any data so it just fills the gap of that data so help me what should I do in my code
https://drive.google.com/file/d/1rkM5D1WE2N-Qmqm2_DwiyLdnXDNhSSyV/view?usp=sharing this is an image here you can see 12 14 and I delete 13 so why it haven't change and if I use Intent for refresh MainActivity so the data is inserted and delete is changed but when we press the back button it moves to the previous mainActivity and data is lost.
This is MainActivity Code
package com.example.booklibrary;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.SearchView;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.textfield.TextInputLayout;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
FloatingActionButton fltButn;
AlertDialog alertDialog;
SQLiteDatabase mDatabsae;
myDatabaseClass myDatabaseClass;
ArrayList < String > book__id, book__title, book__author, book__pages;
customAdapter customAdapter;
RelativeLayout forsnackbar;
ImageView empty_image , main_Search ,showoff_Search;
TextInputLayout search_text;
TextView empty_textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate ( savedInstanceState );
setContentView ( R.layout.activity_main );
forsnackbar = findViewById ( R.id.main_relative );
//for emptyIamge View
empty_image = findViewById ( R.id.empty_imageView );
empty_textView =findViewById ( R.id.empty_textView );
//for search
main_Search = findViewById ( R.id.main_search );
search_text = findViewById ( R.id.search_editText );
//for showoffSearch
showoff_Search = findViewById ( R.id.showoff_search );
showoff_Search.setOnClickListener ( new View.OnClickListener () {
@Override
public void onClick(View v) {
showoff_Search.setVisibility ( View.GONE );
main_Search.setVisibility ( View.VISIBLE );
search_text.setVisibility ( View.VISIBLE );
}
} );
//recyclerView
recyclerView = findViewById ( R.id.recyclerView );
recyclerView.setLayoutManager ( new LinearLayoutManager ( MainActivity.this ) );
myDatabaseClass = new myDatabaseClass ( MainActivity.this );
book__id = new ArrayList <> ();
book__title = new ArrayList <> ();
book__author = new ArrayList <> ();
book__pages = new ArrayList <> ();
//method for showing data into UI
showDataToUi ();
customAdapter = new customAdapter ( this , book__id , book__title , book__author , book__pages );
recyclerView.setAdapter ( customAdapter );
//floatingAction button
fltButn = findViewById ( R.id.addFloating );
fltButn.setOnClickListener ( new View.OnClickListener () {
@Override
public void onClick(View view) {
// Toast.makeText ( MainActivity.this , "Hello" , Toast.LENGTH_SHORT ).show ();
fabButtonClick ();
}
} );
}
private void fabButtonClick() {
MaterialAlertDialogBuilder myDialog = new MaterialAlertDialogBuilder ( this );
LayoutInflater layoutInflater = LayoutInflater.from ( this );
View view = layoutInflater.inflate ( R.layout.add_data , null );
myDialog.setView ( view );
alertDialog = myDialog.create ();
alertDialog.setCancelable ( true );
final TextInputLayout title,author, pages;;
Button addButton;
title = view.findViewById ( R.id.Title );
author = view.findViewById ( R.id.Auther );
pages = view.findViewById ( R.id.pages );
addButton = view.findViewById ( R.id.addButton );
addButton.setOnClickListener ( new View.OnClickListener () {
@Override
public void onClick(View v) {
String bookTitle = title.getEditText ().getText ().toString ().trim ();
String bookAuthor = author.getEditText ().getText ().toString ().trim ();
String bookPages = pages.getEditText ().getText ().toString ().trim () ;
if(bookTitle.equals ( "" ))
{
title.setError ( "Required Field" );
}
else if(bookAuthor.equals ( "" ))
{
author.setError ( "Required Field" );
}
else if(bookPages.equals ( "") )
{
pages.setError ( "Required Field");
}
else {
myDatabaseClass myDatabaseClass = new myDatabaseClass ( MainActivity.this );
myDatabaseClass.addBook ( bookTitle , bookAuthor , bookPages );
alertDialog.dismiss ();
// Intent intent = new Intent ( getApplicationContext () , MainActivity.class );
// startActivity ( intent );
Snackbar.make ( forsnackbar,"Added",Snackbar.LENGTH_SHORT ).show ();
}
} });
alertDialog.show ();
//.getWindow().setLayout(1200, 900); - this work when we use a simple AlerrtDialog
}
private void showDataToUi() {
Cursor cursor = myDatabaseClass.readAllData ();
if (cursor.getCount () == 0) {
Toast.makeText ( this , "No data" , Toast.LENGTH_SHORT ).show ();
empty_textView.setVisibility ( View.VISIBLE );
empty_image.setVisibility ( View.VISIBLE );
} else {
while ((cursor.moveToNext ())) {
book__id.add ( cursor.getString ( 0 ) ); //here add() function is from ArrayList
book__title.add ( cursor.getString ( 1 ) );
book__author.add ( cursor.getString ( 2 ) );
book__pages.add ( cursor.getString ( 3 ) );
}
empty_textView.setVisibility ( View.GONE );
empty_image.setVisibility ( View.GONE );
}
}
}
This is myDatabse Class
package com.example.booklibrary;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;
import androidx.annotation.Nullable;
public class myDatabaseClass extends SQLiteOpenHelper {
private Context context;
public static final String DATABASE_NAME = "BookLibrary.DB";
public static final int DATABASE_VERSION = 1;
public static final String TABLE_NAME = "My_Book";
public static String COLUMN_ID = "_id";
public static final String COLUMN_TITLE = "book_title";
public static final String COLUMN_AUTHOR = "book_author";
public static final String COLUMN_PAGES = "book_pages";
SQLiteDatabase mDatabase;
myDatabaseClass(@Nullable Context context) {
super ( context , DATABASE_NAME , null , DATABASE_VERSION );
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
String query = " CREATE TABLE " + TABLE_NAME + " ( " + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_TITLE + " TEXT, " + COLUMN_AUTHOR + " TEXT, " + COLUMN_PAGES + " INTEGER);";
db.execSQL ( query );
}
@Override
public void onUpgrade(SQLiteDatabase db , int oldVersion , int newVersion) {
db.execSQL ( "DROP TABLE IF EXISTS " + TABLE_NAME );
onCreate ( db );
}
//for inserting the data into table
void addBook(String title , String name , String pages) {
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase (); //this method in use to write the data to our table
ContentValues values = new ContentValues (); //it passs the value to our database table
values.put ( COLUMN_TITLE , title );
values.put ( COLUMN_AUTHOR , name );
values.put ( COLUMN_PAGES , pages );
long result = sqLiteDatabase.insert ( TABLE_NAME , null , values );
if (result == -1) {
Toast.makeText ( context , "failed" , Toast.LENGTH_SHORT ).show ();
} else {
Toast.makeText ( context , " success add book" , Toast.LENGTH_SHORT ).show ();
}
}
//for showing the data to the UI
Cursor readAllData() {
String query = " SELECT * FROM " + TABLE_NAME ;
SQLiteDatabase database = this.getReadableDatabase ();
Cursor cursor= database.query ( TABLE_NAME,null,null,null,null,null,COLUMN_ID);
if (database != null) {
cursor = database.rawQuery ( query , null );
}
return cursor;
}
//for update the data
void upadteData(String row_id , String row_title , String row_author , String row_pages) {
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase ();
ContentValues contentValues = new ContentValues ();
contentValues.put ( COLUMN_TITLE , row_title );
contentValues.put ( COLUMN_AUTHOR , row_author );
contentValues.put ( COLUMN_PAGES , row_pages );
long result = sqLiteDatabase.update ( TABLE_NAME , contentValues , "_id=?" , new String[]{row_id} );
if (result == -1) {
Toast.makeText ( context , "Failed update" , Toast.LENGTH_SHORT ).show ();
} else {
Toast.makeText ( context , "update done" , Toast.LENGTH_SHORT ).show ();
}
}
//for delete the data
void deleteData(String row_id) {
SQLiteDatabase sqLiteDatabase = this.getWritableDatabase ();
long result = sqLiteDatabase.delete ( TABLE_NAME , "_id= ?" , new String[]{row_id} );
if (result == -1) {
Toast.makeText ( context , "Failed Delete" , Toast.LENGTH_SHORT ).show ();
} else {
Toast.makeText ( context , "deleted done" , Toast.LENGTH_SHORT ).show ();
}
}
}
This is my Adapter class
package com.example.booklibrary;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.PopupMenu;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.textfield.TextInputLayout;
import java.util.ArrayList;
public class customAdapter extends RecyclerView.Adapter < customAdapter.MyViewHolder > implements PopupMenu.OnMenuItemClickListener {
String delete_id, update_id, update_title, update_author, update_pages;
Intent intent, inn;
private Context context;
AlertDialog alertDialog;
private ArrayList < String > book__id, book__title, book__author, book__pages;
public customAdapter(Context context , ArrayList < String > book__id , ArrayList < String > book__title , ArrayList < String > book__author , ArrayList < String > book__pages) {
this.context = context;
this.book__id = book__id;
this.book__title = book__title;
this.book__author = book__author;
this.book__pages = book__pages;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent , int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from ( context );
View view = layoutInflater.inflate ( R.layout.custom_adapter , null );
return new MyViewHolder ( view );
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder , final int position) {
holder.id.setText ( book__id.get ( position ) );
holder.title.setText ( book__title.get ( position ) );
holder.author.setText ( book__author.get ( position ) );
holder.pages.setText ( book__pages.get ( position ) );
holder.myLinerLayout.setOnLongClickListener ( new View.OnLongClickListener () {
@Override
public boolean onLongClick(View v) {
//for delete the item
delete_id = book__id.get ( position );
update_id = book__id.get ( position );
update_title = book__title.get ( position );
update_author = book__author.get ( position );
update_pages = book__pages.get ( position );
longClickMenu ( v );
return true;
}
} );
}
@Override
public int getItemCount() {
return book__id.size ();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView id, title, author, pages;
RelativeLayout myLinerLayout;
public MyViewHolder(@NonNull View itemView) {
super ( itemView );
id = itemView.findViewById ( R.id.item_id );
title = itemView.findViewById ( R.id.item_title );
author = itemView.findViewById ( R.id.item_AuthorName );
pages = itemView.findViewById ( R.id.item_pages );
myLinerLayout = itemView.findViewById ( R.id.item_linerLayout );
}
}
private void longClickMenu(View view) // View must be pasing
{
PopupMenu popupMenu = new PopupMenu ( view.getContext () , view );
popupMenu.inflate ( R.menu.popup_menu );
popupMenu.setOnMenuItemClickListener ( customAdapter.this );
popupMenu.show ();
}
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId ()) {
case R.id.edit_item:
//context.startActivity ( intent );
editButtonClick ();
return true;
case R.id.delete_item:
Toast.makeText ( context , "click delete" , Toast.LENGTH_SHORT ).show ();
myDatabaseClass myDatabaseClass = new myDatabaseClass ( context );
myDatabaseClass.deleteData ( delete_id );
Intent intent = new Intent ( context , MainActivity.class );
context.startActivity ( intent );
return true;
default:
return false;
}
}
private void editButtonClick() {
AlertDialog.Builder myDialog = new AlertDialog.Builder ( context );
LayoutInflater layoutInflater = LayoutInflater.from ( context );
View view = layoutInflater.inflate ( R.layout.add_data , null );
myDialog.setView ( view );
alertDialog = myDialog.create ();
alertDialog.setCancelable ( true );
final TextInputLayout updateTitle, updateAuthor, updatePages;
updateTitle = view.findViewById ( R.id.Title );
updateAuthor = view.findViewById ( R.id.Auther );
updatePages = view.findViewById ( R.id.pages );
updateTitle.getEditText ().setText ( update_title );
updateAuthor.getEditText ().setText ( update_author );
updatePages.getEditText ().setText ( update_pages );
Log.d ( "update thing " , update_id );
Button updatebutton = view.findViewById ( R.id.addButton );
updatebutton.setOnClickListener ( new View.OnClickListener () {
@Override
public void onClick(View v) {
myDatabaseClass myDatabaseClass = new myDatabaseClass ( context );
myDatabaseClass.upadteData ( update_id , updateTitle.getEditText ().getText ().toString () , updateAuthor.getEditText ().getText ().toString () , updatePages.getEditText ().getText ().toString () );
inn = new Intent ( context , MainActivity.class );
context.startActivity ( inn );
}
} );
alertDialog.show ();
}
}
答案1
得分: 1
你可以使用 notifyDataSetChanged();
在你的 FloatingActionButton(fab)的点击事件中添加以下代码:
customAdapter.notifyDataSetChanged();
对于删除行的操作,可以使用以下代码:
book_id.remove(position);
customAdapter.notifyItemRemoved(position);
customAdapter.notifyItemRangeChanged(position, book_id.size());
就是这样。
更新:
package com.example.booklibrary;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.SearchView;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.textfield.TextInputLayout;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
FloatingActionButton fltButn;
AlertDialog alertDialog;
SQLiteDatabase mDatabsae;
myDatabaseClass myDatabaseClass;
ArrayList<String> book__id, book__title, book__author, book__pages;
customAdapter customAdapter;
RelativeLayout forsnackbar;
ImageView empty_image, main_Search, showoff_Search;
TextInputLayout search_text;
TextView empty_textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
forsnackbar = findViewById(R.id.main_relative);
//for emptyIamge View
empty_image = findViewById(R.id.empty_imageView);
empty_textView = findViewById(R.id.empty_textView);
//for search
main_Search = findViewById(R.id.main_search);
search_text = findViewById(R.id.search_editText);
//for showoffSearch
showoff_Search = findViewById(R.id.showoff_search);
showoff_Search.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showoff_Search.setVisibility(View.GONE);
main_Search.setVisibility(View.VISIBLE);
search_text.setVisibility(View.VISIBLE);
}
});
//recyclerView
recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
myDatabaseClass = new myDatabaseClass(MainActivity.this);
book__id = new ArrayList<>();
book__title = new ArrayList<>();
book__author = new ArrayList<>();
book__pages = new ArrayList<>();
//将数据显示在UI上的方法
showDataToUi();
customAdapter = new customAdapter(this, book__id, book__title, book__author, book__pages);
recyclerView.setAdapter(customAdapter);
//floatingActionButton
fltButn = findViewById(R.id.addFloating);
fltButn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Toast.makeText(MainActivity.this, "Hello", Toast.LENGTH_SHORT).show();
fabButtonClick();
}
});
}
//其他方法...
}
英文:
You can use notifyDataSetChanged();
Inside your fab onClick add this
customAdapter.notifyDataSetChanged();
And deleting the rows use
book_id.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, book_id.size());
That's it
Update :
package com.example.booklibrary;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.SearchView;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.textfield.TextInputLayout;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
FloatingActionButton fltButn;
AlertDialog alertDialog;
SQLiteDatabase mDatabsae;
myDatabaseClass myDatabaseClass;
ArrayList < String > book__id, book__title, book__author, book__pages;
customAdapter customAdapter;
RelativeLayout forsnackbar;
ImageView empty_image , main_Search ,showoff_Search;
TextInputLayout search_text;
TextView empty_textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate ( savedInstanceState );
setContentView ( R.layout.activity_main );
forsnackbar = findViewById ( R.id.main_relative );
//for emptyIamge View
empty_image = findViewById ( R.id.empty_imageView );
empty_textView =findViewById ( R.id.empty_textView );
//for search
main_Search = findViewById ( R.id.main_search );
search_text = findViewById ( R.id.search_editText );
//for showoffSearch
showoff_Search = findViewById ( R.id.showoff_search );
showoff_Search.setOnClickListener ( new View.OnClickListener () {
@Override
public void onClick(View v) {
showoff_Search.setVisibility ( View.GONE );
main_Search.setVisibility ( View.VISIBLE );
search_text.setVisibility ( View.VISIBLE );
}
} );
//recyclerView
recyclerView = findViewById ( R.id.recyclerView );
recyclerView.setLayoutManager ( new LinearLayoutManager ( MainActivity.this ) );
myDatabaseClass = new myDatabaseClass ( MainActivity.this );
book__id = new ArrayList <> ();
book__title = new ArrayList <> ();
book__author = new ArrayList <> ();
book__pages = new ArrayList <> ();
//method for showing data into UI
showDataToUi ();
customAdapter = new customAdapter ( this , book__id , book__title , book__author , book__pages );
recyclerView.setAdapter ( customAdapter );
//floatingAction button
fltButn = findViewById ( R.id.addFloating );
fltButn.setOnClickListener ( new View.OnClickListener () {
@Override
public void onClick(View view) {
// Toast.makeText ( MainActivity.this , "Hello" , Toast.LENGTH_SHORT ).show ();
fabButtonClick ();
}
} );
}
private void fabButtonClick() {
MaterialAlertDialogBuilder myDialog = new MaterialAlertDialogBuilder ( this );
LayoutInflater layoutInflater = LayoutInflater.from ( this );
View view = layoutInflater.inflate ( R.layout.add_data , null );
myDialog.setView ( view );
alertDialog = myDialog.create ();
alertDialog.setCancelable ( true );
final TextInputLayout title,author, pages;;
Button addButton;
title = view.findViewById ( R.id.Title );
author = view.findViewById ( R.id.Auther );
pages = view.findViewById ( R.id.pages );
addButton = view.findViewById ( R.id.addButton );
addButton.setOnClickListener ( new View.OnClickListener () {
@Override
public void onClick(View v) {
String bookTitle = title.getEditText ().getText ().toString ().trim ();
String bookAuthor = author.getEditText ().getText ().toString ().trim ();
String bookPages = pages.getEditText ().getText ().toString ().trim () ;
if(bookTitle.equals ( "" ))
{
title.setError ( "Required Field" );
}
else if(bookAuthor.equals ( "" ))
{
author.setError ( "Required Field" );
}
else if(bookPages.equals ( "") )
{
pages.setError ( "Required Field");
}
else {
myDatabaseClass myDatabaseClass = new myDatabaseClass ( MainActivity.this );
myDatabaseClass.addBook ( bookTitle , bookAuthor , bookPages );
alertDialog.dismiss ();
// Intent intent = new Intent ( getApplicationContext () , MainActivity.class );
// startActivity ( intent );
Snackbar.make ( forsnackbar,"Added",Snackbar.LENGTH_SHORT ).show ();
//Added
showDataToUi
customAdapter.notifyDataSetChanged();
}
} });
alertDialog.show ();
//.getWindow().setLayout(1200, 900); - this work when we use a simple AlerrtDialog
}
private void showDataToUi() {
Cursor cursor = myDatabaseClass.readAllData ();
if (cursor.getCount () == 0) {
Toast.makeText ( this , "No data" , Toast.LENGTH_SHORT ).show ();
empty_textView.setVisibility ( View.VISIBLE );
empty_image.setVisibility ( View.VISIBLE );
} else {
while ((cursor.moveToNext ())) {
book__id.add ( cursor.getString ( 0 ) ); //here add() function is from ArrayList
book__title.add ( cursor.getString ( 1 ) );
book__author.add ( cursor.getString ( 2 ) );
book__pages.add ( cursor.getString ( 3 ) );
}
empty_textView.setVisibility ( View.GONE );
empty_image.setVisibility ( View.GONE );
}
}
}
答案2
得分: 0
@jerson
这是我的浮动按钮点击代码,但当我们添加新数据时,RecyclerView 不会改变。
// 浮动操作按钮
fltButn = findViewById(R.id.addFloating);
fltButn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Toast.makeText(MainActivity.this, "Hello", Toast.LENGTH_SHORT).show();
fabButtonClick();
customAdapter.notifyDataSetChanged();
}
});
以下是适配器类中的删除按钮代码
switch (item.getItemId()) {
case R.id.delete_item:
Toast.makeText(context, "点击删除", Toast.LENGTH_SHORT).show();
myDatabaseClass myDatabaseClass = new myDatabaseClass(context);
myDatabaseClass.deleteData(delete_id);
book__id.remove(postionForDelete);
notifyItemRemoved(postionForDelete);
notifyItemRangeChanged(postionForDelete, book__id.size());
notifyDataSetChanged();
return true;
}
此代码粘贴在 onBindViewHolder 类中,我将位置存储到 postionForDelete 变量中。但它删除了其他 id 的数据。
this.postionForDelete = position;
英文:
@jerson
Here is my Fab button clik code but when we add new data the recyclerView is not changing.
//floatingAction button
fltButn = findViewById ( R.id.addFloating );
fltButn.setOnClickListener ( new View.OnClickListener () {
@Override
public void onClick(View view) {
// Toast.makeText ( MainActivity.this , "Hello" , Toast.LENGTH_SHORT ).show ();
fabButtonClick ();
customAdapter.notifyDataSetChanged();
}
} );
and Here is my delete button code in adapter class
case R.id.delete_item:
Toast.makeText ( context , "click delete" , Toast.LENGTH_SHORT ).show ();
myDatabaseClass myDatabaseClass = new myDatabaseClass ( context );
myDatabaseClass.deleteData ( delete_id );
book__id.remove (postionForDelete);
notifyItemRemoved(postionForDelete);
notifyItemRangeChanged(postionForDelete, book__id.size());
notifyDataSetChanged ();
return true;
and this code is paste in onBindViewHolder class ,m storing the postion into postionForDelete var.But its deleting the other id data.
this.postionForDelete = position;
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论