在我的应用程序中,我正在使用使用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();
}
}
});
}
}
谢谢!
答案 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();
}
});