Can't figure out how to delete specific item from recycler view and realm database. I figured out to delete item from recycler view so when I when click on button delete, it deletes that item, but can't figure out how to delete from datebase as well becouse of course when I restart app, same date appears becouse it's not deleted from database.
listitem.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="wrap_content"
android:id="@+id/parentLayout">
<TextView
android:id="@+id/tv_task"
android:text="TASK1"
android:textSize="20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_alignParentLeft="true"/>
<Button
android:id="@+id/btn_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Delete"
android:layout_alignParentRight="true"/>
</RelativeLayout>
MainActivity:
public class MainActivity extends AppCompatActivity {
private ArrayList<String> mTasks = new ArrayList<>();
EditText et_newtask;
Button btn_add;
Realm realm;
RecyclerView recyclerView;
RecyclerViewAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//SETUP RV
recyclerView = findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
//SETUP REALM
realm = Realm.getDefaultInstance();
RealmHelper helper = new RealmHelper(realm);
mTasks = helper.retrive();
//BIND
adapter = new RecyclerViewAdapter( mTasks,this);
recyclerView.setAdapter(adapter);
initTextViewTasks();
}
private void initTextViewTasks(){
et_newtask = (EditText) findViewById(R.id.et_newTask);
btn_add = (Button) findViewById(R.id.btn_add);
btn_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//GET DATA
Tasks t = new Tasks();
String value = et_newtask.getText().toString();
t.setTasks(value);
//SAVE DATA to DB
RealmHelper helper = new RealmHelper(realm);
helper.save(t);
et_newtask.setText("");
//refresh DB
mTasks = helper.retrive();
adapter = new RecyclerViewAdapter(mTasks,MainActivity.this);
recyclerView.setAdapter(adapter);
}
});
}
}
Tasks class:
public class Tasks extends RealmObject {
private String tasks;
public String getTasks() {
return tasks;
}
public void setTasks(String tasks) {
this.tasks = tasks;
}
}
Adapter:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>{
private ArrayList<String> mTv_tasks = new ArrayList<>();
private ArrayList<Tasks> dataList = new ArrayList<>();
private Context mContext;
OnClickInterface onClickInterface;
Realm realm;
public RecyclerViewAdapter(ArrayList<String> mTv_tasks,OnClickInterface onClickInterface, Context mContext) {
this.mTv_tasks = mTv_tasks;
this.mContext = mContext;
this.onClickInterface = onClickInterface;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int position) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_listitem, viewGroup,false);
ViewHolder viewHolder = new ViewHolder(view,onClickInterface);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, final int position) {
viewHolder.tv_task.setText(mTv_tasks.get(position));
viewHolder.parentLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(mContext, mTv_tasks.get(position), Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemCount() {
return mTv_tasks.size();
}
When I click on specific btn_delete I want to delete that specific object (row) of recycler view.
I'm assuming that you know how to delete an item from Realm, but you don't know how to do that with an onclicklistener inside your adapter.
1) Create an interface to do the communication between adapter and activity
public interface OnClickInterface {
void onDeleteClicked(int id); //user id, or whatever you need to know what item you should delete
}
2) Receive your listener in the adapter constructor
public class YourAdapter ... {
OnClickInterface onClickInterface;
//initialilize in a constructor
public Adapter(OnClickInterface onClickInterface){
this.onClickInterface = onClickInterface
}
}
3) Call the listener inside your onClick to delete the item from RecyclerView
public void onClick(View v) {
if(v.equals(btn_delete)){
this.onClickInterface.onDeleteClicked(id)
(...) remove from recycler view
}
}
4) Implements OnCickInterface on your Activity
public class MainActivity extends AppCompatActivity implements OnClickInterface {
@Override
public void onDeleteClicked(int id){
//delete from realm
}
}
Thats it, really hope that this helps with your problem