在按钮单击时从“回收者视图”中删除项目。按钮是否在“回收者视图”之外设置?

时间:2019-12-23 10:41:19

标签: java android android-studio android-layout

我想要RecyclerView之外的删除按钮和Edit Text来接受用户输入,当我单击 Delete Button (删除按钮)时,{{1与Recyclerview文本匹配的}}应该删除。我该如何实现?

MainActivity.java:

Edittext

activity_main.xml:

 public class MainActivity extends AppCompatActivity {
       RecyclerView recyclerView;
       Adapter adapter;
       ArrayList<ModelClass> arrayList;
       RecyclerView.LayoutManager layoutManager;
       EditText edit_name, edit_desc;
       Spinner spinner;
       Button btm_save, btn_delete;
       String Name, Description, Spinner;
       SQLiteDatabase sqLiteDatabase;
       SqliteHelper sqliteHelper;


       @Override
       protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);
           edit_name = findViewById(R.id.edit_name);
           edit_desc = findViewById(R.id.edit_desc);
           btm_save = findViewById(R.id.btn_save);
           btn_delete = findViewById(R.id.btn_view);
           spinner = findViewById(R.id.spinner);

           sqliteHelper = new SqliteHelper(this);
           sqLiteDatabase = sqliteHelper.getReadableDatabase();


           ArrayAdapter<CharSequence> arrayAdapter = ArrayAdapter.createFromResource(this, R.array.Options, android.R.layout.simple_spinner_item);
           arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
           spinner.setAdapter(arrayAdapter);


           recyclerView = findViewById(R.id.recylerView);
           arrayList = new ArrayList<>();
           adapter = new Adapter(this, arrayList);
           recyclerView.setAdapter(adapter);
           layoutManager = new LinearLayoutManager(this);
           recyclerView.setLayoutManager(layoutManager);
           getAllData();

           edit_name.addTextChangedListener(textWatcher);
           edit_desc.addTextChangedListener(textWatcher);
           btm_save.setOnClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View view) {
                   Name = edit_name.getText().toString();
                   Description = edit_desc.getText().toString();
                   Spinner = spinner.getSelectedItem().toString();
                   if (!ValidateUser(Name)) {
                       if (!TextUtils.isEmpty(Spinner)) {
                           ModelClass modelClass = new ModelClass(Name, Spinner, Description);
                           arrayList.add(modelClass);
                           adapter.notifyItemInserted(arrayList.size());
                           InsertData();
                       } else {
                           Toast.makeText(MainActivity.this, "Please Select Experience", Toast.LENGTH_SHORT).show();
                       }
                   } else {
                       Toast.makeText(MainActivity.this, "User name Already Exits", Toast.LENGTH_SHORT).show();
                   }


               }
           });

           btn_delete.setOnClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View view) {
                   Integer deletedRows = sqliteHelper.deleteData(edit_name.getText().toString());

                   if (deletedRows > 0) {
                       Toast.makeText(MainActivity.this, "Record Deleted", Toast.LENGTH_SHORT).show();
                   } else {
                       Toast.makeText(MainActivity.this, "Record Not Found", Toast.LENGTH_SHORT).show();
                   }

               }
           });


       }

       private void InsertData() {
           boolean InsertSuccessfully = sqliteHelper.InsertData(Name, Description, Spinner);
           if (InsertSuccessfully) {
               Toast.makeText(this, "Record Inserted", Toast.LENGTH_SHORT).show();
           } else {
               Toast.makeText(this, "Record Not Inserted", Toast.LENGTH_SHORT).show();
           }
       }


       public void getAllData() {

           Cursor cursor = sqliteHelper.retriveData();
           while (cursor.moveToNext()) {
               ModelClass modelClass = new ModelClass(cursor.getString(cursor.getColumnIndex(SqliteHelper.COL_2)),
                       cursor.getString(cursor.getColumnIndex(SqliteHelper.COL_3)),
                       cursor.getString(cursor.getColumnIndex(SqliteHelper.COL_4)));
               arrayList.add(modelClass);
           }
       }

       private TextWatcher textWatcher = new TextWatcher() {
           @Override
           public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

           }

           @Override
           public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
               Name = edit_name.getText().toString();
               Description = edit_desc.getText().toString();
               btm_save.setEnabled(!Name.isEmpty() && !Description.isEmpty());
           }

           @Override
           public void afterTextChanged(Editable editable) {
           }
       };

       public boolean ValidateUser(String name) {
           SQLiteDatabase database = sqliteHelper.getWritableDatabase();
           Cursor cursor = database.query(SqliteHelper.TABLE_NAME, null, SqliteHelper.COL_2 + "=?", new String[]{name},
                   null, null, null);
           int i = cursor.getCount();
           if (i > 0) {
               return true;
           } else {
               return false;
           }

       }

   }

2 个答案:

答案 0 :(得分:0)

如果使用您所使用的代码删除了您的商品,则只需刷新列表:

btn_delete.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Integer deletedRows = sqliteHelper.deleteData(edit_name.getText().toString());

        if (deletedRows > 0) {
            Toast.makeText(MainActivity.this, "Record Deleted", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(MainActivity.this, "Record Not Found", Toast.LENGTH_SHORT).show();
        }

        getAllData();
        adapter.notifyDataSetChanged();
    }
});

答案 1 :(得分:0)

在您的modelClass对象的ArrayList中找到字符串,一旦找到该索引,便从数组列表中删除该条目,并将其通知给recyclerView的适配器。

int count = 0;
for(ModelClass mod : arrayList) {
    if(mod.name.equalsIgnoreCase(editText.getString)) {
        arrayList.remove(mod);
        adapter.notifyItemRemoved(count);
        break;
    }
    count++;
}