Как удалить конкретный элемент из представления переработчика и из базы данных области? - PullRequest
0 голосов
/ 12 июня 2019

Не могу понять, как удалить определенный элемент из представления переработчика и базы данных области. Я решил удалить элемент из представления переработчика, поэтому, когда я нажимаю кнопку «Удалить», он удаляет этот элемент, но не может понять, как удалить его из базы данных, потому что, конечно, когда я перезапускаю приложение, появляется та же дата, потому что это не так. удалено из базы данных.

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);
            }
        });
    }
}

Класс заданий:

public class Tasks extends RealmObject {
    private String tasks;

    public String getTasks() {
        return tasks;
    }

    public void setTasks(String tasks) {
        this.tasks = tasks;
    }
}

Адаптер:

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();
    }

Когда я нажимаю на конкретное btn_delete, я хочу удалить этот конкретный объект (строку) представления переработчика.

1 Ответ

0 голосов
/ 13 июня 2019

Я предполагаю, что вы знаете, как удалить элемент из Realm, но вы не знаете, как это сделать с помощью onclicklistener внутри вашего адаптера.

1) Создать интерфейс для связи между адаптером и активностью

public interface OnClickInterface {
    void onDeleteClicked(int id); //user id, or whatever you need to know what item you should delete
}

2) Получите ваш слушатель в конструкторе адаптера

 public class YourAdapter ... {
     OnClickInterface onClickInterface;

     //initialilize in a constructor
     public Adapter(OnClickInterface onClickInterface){
        this.onClickInterface = onClickInterface
     }
}

3) Позвоните слушателю внутри вашего onClick, чтобы удалить элемент из RecyclerView

public void onClick(View v) { 
     if(v.equals(btn_delete)){ 
        this.onClickInterface.onDeleteClicked(id)
        (...) remove from recycler view
     }
}

4) Внедряет OnCickInterface в вашу активность

public class MainActivity extends AppCompatActivity implements OnClickInterface {

    @Override
    public void onDeleteClicked(int id){
       //delete from realm
    }

}

Вот так, очень надеюсь, что это поможет с вашей проблемой

...