如何从数组列表中删除单击按钮时的列表视图项?

时间:2019-06-15 14:38:34

标签: java android

List View With Remove Button

在我的应用程序中,我正在使用使用ArrayList的列表视图。基本上,我需要帮助的是在用户点击“删除”按钮时删除该项目。我在我的项目列表布局中添加了删除按钮。因此,每次用户将项目添加到列表中时,其旁边都会显示“删除”按钮。我只需要那个删除按钮就可以删除相应的项目。

这是我的代码...

主要XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rl"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="650dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="650dp">

        <ListView
            android:id="@+id/lstView"
            android:layout_width="match_parent"
            android:layout_height="650dp"
            tools:ignore="NestedScrolling" />

    </RelativeLayout>
</ScrollView>

<include layout="@layout/add_and_clear_list_buttons"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"/>

商品列表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">

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

<TextView
    android:id="@+id/item_tv"
    android:layout_width="315dp"
    android:layout_height="wrap_content"
    android:textStyle="bold"
    android:textSize="20sp"
    android:textColor="@android:color/black"/>

    <Button
        android:id="@+id/remove_item_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Remove"
        android:textColor="@android:color/holo_red_dark"
        android:textSize="14sp"
        android:textStyle="bold" />

</LinearLayout>
</ScrollView>

Java类:

public class MainActivity extends AppCompatActivity {

ListView lstVw;
Button addBtn, removeBtn, clearListBtn;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    lstVw = findViewById(R.id.lstView);
    addBtn = findViewById(R.id.add_item_btn);
    removeBtn = findViewById(R.id.remove_item_btn);
    clearListBtn = findViewById(R.id.clear_list_btn);

    final ArrayAdapter<String> adapter;
    final ArrayList<String> arrayList;

    arrayList = new ArrayList<>();
    adapter = new ArrayAdapter<>(this, R.layout.item_list, R.id.item_tv, arrayList);
    lstVw.setAdapter(adapter);

    addBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final AlertDialog.Builder adb = new AlertDialog.Builder(MainActivity.this);
            adb.setTitle("Enter Item Name");
            final EditText itemTxt = new EditText(MainActivity.this);
            itemTxt.setText(getString(R.string.default_item_name_value));
            itemTxt.setInputType(InputType.TYPE_CLASS_TEXT);
            adb.setView(itemTxt);

            adb.setPositiveButton("Add", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    String getItem = itemTxt.getText().toString();

                    Set<String> s = new LinkedHashSet<>(arrayList); 
                    if (s.contains(getItem)){
                        arrayList.clear();
                        arrayList.addAll(s);
                        Toast.makeText(getApplicationContext(), getItem + " already exists in the list!", Toast.LENGTH_LONG).show();
                    }else{
                        arrayList.add(getItem);
                        adapter.notifyDataSetChanged();
                    }
                }
            });

            adb.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {}
            });

            adb.create();
            adb.show();
        }
    });

    clearListBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (!arrayList.isEmpty()) {
                arrayList.clear();
                adapter.notifyDataSetChanged();
                }
            }
        });
    }
}

谢谢!

2 个答案:

答案 0 :(得分:2)

基本上,您需要在列表视图中添加一个侦听器,并公开接收点击的项目的位置,然后“删除”按钮可以按位置删除该项目。

看到这个问题 How to get the selected item from ListView?获取监听器实现

要在MainActivity中删除项目

removeBtn.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            list.remove(position); // remove the item
            notifyDataSetChanged(); // update de dataset 
        }
    });

答案 1 :(得分:1)

    yourBtn.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
       View parentRow = (View) v.getParent();
       ListView listView = (ListView) parentRow.getParent();
       final int position = listView.getPositionForView(parentRow);
      youArrayList.remove(position);
      yourArrayAdapter.notifyDataSetChanged();
    }
 });