Ниже приведены результаты моих текущих кодов:
1-й: изначально нет Элемент заметки в представлении Recycler, поэтому я нажимаю кнопку «ДОБАВИТЬ», чтобы добавить несколько примечаний, например: 1 и 2.
ПЕРВОЕ ИЗОБРАЖЕНИЕ
2-е: Когда я нажимаю «переработать» bin», для каждого элемента появится кнопка удаления, и я смогу удалить этот элемент.
ВТОРОЕ ИЗОБРАЖЕНИЕ
3-е: Итак, я нажимаю «Удалить», и это кажется ПРАВИЛЬНЫМ. для просмотра Recycler:
ТРЕТЬЕ ИЗОБРАЖЕНИЕ
4-е: Итак, когда я хочу добавить новую заметку, например: 3, 4 и 5, это тоже кажется ПРАВИЛЬНЫМ.
ЧЕТВЕРТОЕ ИЗОБРАЖЕНИЕ
ПЯТОЕ ИЗОБРАЖЕНИЕ
ПЯТОЕ: ПРОБЛЕМА ЗДЕСЬ: Когда я хочу просмотреть каждую заметку, появляются ее детали раньше!
Например: когда я нажимаю на цифру 3, я получаю 1
клик 4, дайте мне 2
клик 5, дайте мне 3... и т. д.
Я смотрю на это целых 2 дня, используя CHATGPT, CLAUDEAI, YOUTUBE, STACKOVERFLOW, GOOGLE, но до сих пор не понял. КАК РЕШИТЬ эту проблему...

/>ИМО: мне кажется, что это связано с тем, что я неправильно написал код удаления элемента из базы данных. ПРОБЛЕМА теперь заключается в том, что ЭЛЕМЕНТ успешно удален из RecyclerView, но не удалось удалить из базы данных помещений...
ЭТО МОЙ класс NoteAdapter:
Код: Выделить всё
package com.example.tostudylistv2.RecyclerView;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.Looper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.tostudylistv2.Activities.MainActivity;
import com.example.tostudylistv2.Activities.UpdateNote;
import com.example.tostudylistv2.Database.NoteDatabase;
import com.example.tostudylistv2.Note;
import com.example.tostudylistv2.R;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class NoteAdapter extends RecyclerView.Adapter{
private Context context;
private List noteList;
private boolean showDoDel = false;
public NoteAdapter(Context context, List noteList) {
this.context = context;
this.noteList = noteList;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.note,parent,false); // to let all UI/ View in the XML layout to be usable
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.txtNote.setText(noteList.get(position).getTitle());
holder.txtNote.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context,"WORK",Toast.LENGTH_SHORT).show();
notifyDataSetChanged();
Intent i = new Intent(context, UpdateNote.class);
i.putExtra("position",position);
context.startActivity(i);
}
});
if (showDoDel) {
holder.btnDoDel.setVisibility(View.VISIBLE);
holder.btnDoDel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
delNoteInBackground(noteList.get(position));
}
});
}
else {
holder.btnDoDel.setVisibility(View.GONE);
}
}
public void delNoteInBackground(Note note) {
ExecutorService executorService = Executors.newSingleThreadExecutor();
Handler handler = new Handler(Looper.getMainLooper());
executorService.execute(new Runnable() {
@Override
public void run() {
NoteDatabase.getInstance(context).getNoteDao().deleteNote(note);
handler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(context, "Deleted from the database!", Toast.LENGTH_SHORT).show();
if (!noteList.isEmpty()) {
noteList.remove(note);
notifyDataSetChanged();
}
else {
Toast.makeText(context,"Nothing to delete",Toast.LENGTH_SHORT).show();
}
}
});
}
});
}
@Override
public int getItemCount() {
return noteList.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder { //initialize all the UI element/ view of the item here
private TextView txtNote;
private ImageView btnDoDel;
public ViewHolder(@NonNull View itemView) {
super(itemView);
txtNote = itemView.findViewById(R.id.txtNote);
btnDoDel = itemView.findViewById(R.id.btnDoDel);
}
}
public void setNoteList(List noteList) {
this.noteList = noteList;
}
public void setShowDoDel(boolean showDoDel) {
this.showDoDel = showDoDel;
}
}
Код: Выделить всё
package com.example.tostudylistv2.Activities;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import androidx.activity.EdgeToEdge;
import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.example.tostudylistv2.Database.NoteDatabase;
import com.example.tostudylistv2.Note;
import com.example.tostudylistv2.RecyclerView.NoteAdapter;
import com.example.tostudylistv2.R;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class MainActivity extends AppCompatActivity {
private RecyclerView noteRecView;
private List noteList = new ArrayList();
private FloatingActionButton btnAdd, btnDel, btnBack;
private ImageView btnDoDel;
private EditText input;
ActivityResultLauncher activityResultLauncher;
private NoteAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
noteRecView = findViewById(R.id.noteRecView);
init();
initListener();
initActivityLauncher();
adapter = new NoteAdapter(this, noteList);
noteRecView.setAdapter(adapter);
LinearLayoutManager lm = new LinearLayoutManager(this);
noteRecView.setLayoutManager(lm);
getNoteInBackground();
}
public void init() {
btnAdd = findViewById(R.id.btnAdd);
btnDel = findViewById(R.id.btnDel);
btnBack = findViewById(R.id.btnBack);
btnDoDel = findViewById(R.id.btnDoDel);
input = findViewById(R.id.input);
}
public void initListener() {
btnAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this, AddNote.class);
activityResultLauncher.launch(i);
}
});
btnDel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
adapter.setShowDoDel(true);
adapter.notifyDataSetChanged(); //***important, to refresh the RecView and display the result!!!
btnDel.setVisibility(View.GONE);
btnBack.setVisibility(View.VISIBLE);
}
});
btnBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btnBack.setVisibility(View.GONE);
adapter.setShowDoDel(false);
adapter.notifyDataSetChanged();
btnDel.setVisibility(View.VISIBLE);
}
});
}
public void addNoteInBackground(Note note) {
ExecutorService executorService = Executors.newSingleThreadExecutor();
Handler handler = new Handler(Looper.getMainLooper());
executorService.execute(new Runnable() {
@Override
public void run() {
NoteDatabase.getInstance(MainActivity.this).getNoteDao().addNote(note);
handler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "Added to the database!", Toast.LENGTH_SHORT).show();
noteList.add(note);
adapter.notifyDataSetChanged();
}
});
}
});
}
public void getNoteInBackground() {
ExecutorService executorService = Executors.newSingleThreadExecutor();
Handler handler = new Handler(Looper.getMainLooper());
executorService.execute(new Runnable() {
@Override
public void run() {
noteList = NoteDatabase.getInstance(MainActivity.this).getNoteDao().getAllNote();
handler.post(new Runnable() {
@Override
public void run() {
adapter.setNoteList(noteList);
adapter.notifyDataSetChanged();
}
});
}
});
}
public void initActivityLauncher() {
activityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback() {
@Override
public void onActivityResult(ActivityResult activityResult) {
int result = activityResult.getResultCode();
Intent data = activityResult.getData();
if (result == RESULT_OK && data != null) {
String newTitle = data.getStringExtra("tempTitle");
if (newTitle != null && !newTitle.isEmpty()) {
Note newNote = new Note(newTitle);
addNoteInBackground(newNote);
}
} else {
Toast.makeText(MainActivity.this, "Operation canceled", Toast.LENGTH_SHORT).show();
}
}
});
}
}
Подробнее здесь: https://stackoverflow.com/questions/785 ... tudio-java