java - 如何永久删除列表视图项?
问题描述
我有这段代码,其中 listview 项目从列表中删除,但是在我重新加载 listview 后,该项目再次出现。如何永久删除该项目?请帮我。
删除列表视图项的代码:
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
checkedItemPositions = listView.getCheckedItemPositions();
int itemCount = listView.getCount();
for(int i=itemCount-1; i >= 0; i--){
if(checkedItemPositions.get(i)){
str=list.get(i);
adapter.remove(str);
}
}
checkedItemPositions.clear();
adapter.notifyDataSetChanged();
listView.setAdapter(adapter);
}
});
编辑:正如@Nirup Iyer 所问,这是我的完整代码:
package com.example.myapplication;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.util.SparseBooleanArray;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collections;
import java.util.List;
import static com.example.myapplication.Pop_up.s2;
import static com.example.myapplication.Pop_up.text1;
import static com.example.myapplication.Pop_up.thedate;
import static com.example.myapplication.Pop_up_2.aManager;
import static com.example.myapplication.Pop_up_2.dat;
import static com.example.myapplication.Pop_up_2.dite;
import static com.example.myapplication.Pop_up_2.pIntent;
import static com.example.myapplication.Pop_up_2.pqr;
import static com.example.myapplication.Pop_up_2.s;
import static com.example.myapplication.modify_events.st;
import static com.example.myapplication.modify_events_1.st1;
import static com.example.myapplication.modify_events_2.st2;
public class modify_events_3 extends nav_draw {
ListView listView;
TextView textView;
ArrayAdapter<String> adapter;
String day,month,year;
Button b1,b2;
String str=null;
List<String> list = new ArrayList<String>();
SparseBooleanArray checkedItemPositions;
int i,j;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.events_week);
listView = (ListView) findViewById(R.id.listView);
textView = (TextView) findViewById(R.id.textView);
b1=(Button)findViewById(R.id.button10);
b2=(Button)findViewById(R.id.button11);
final String arr[]=new String[10];
if(dite==null)
{
startActivity(new Intent(modify_events_3.this,nav_draw.class));
Toast.makeText(getApplicationContext(),"Please create an event first", Toast.LENGTH_SHORT).show();
}else {
DateFormat format2 = new SimpleDateFormat("EEE");
DateFormat format3 = new SimpleDateFormat("MMM");
DateFormat format4 = new SimpleDateFormat("yyyy");
day = format2.format(dite);
month = format3.format(dite);
year = format4.format(dite);
list.add(pqr);
adapter = new ArrayAdapter<String>(modify_events_3.this, android.R.layout.simple_list_item_multiple_choice, list);
//Toast.makeText(getApplicationContext(), day + "" + month + "" + year, Toast.LENGTH_LONG).show();
}
if (((st2.equals(day)) && (st1.equals(month)) && (st.equals(year)))) {
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
listView.setAdapter(adapter);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SparseBooleanArray checked = listView.getCheckedItemPositions();
ArrayList<String> selectedItems = new ArrayList<String>();
for(int i=0;i<checked.size();i++) {
int position;
position = checked.keyAt(i);
if (checked.valueAt(i))
selectedItems.add(adapter.getItem(position));
for (int j = 0; j < arr.length; j++) {
str = listView.getItemAtPosition(i).toString();
str = arr[j];
}
}
startActivity(new Intent(modify_events_3.this,Pop_up.class));
Intent incoming = getIntent();
String dat = incoming.getStringExtra("date");
thedate.setText(dat);
text1.setText(str);
Toast.makeText(getApplicationContext(), "Have anything else in mind? ;)", Toast.LENGTH_SHORT).show();
}
});
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
checkedItemPositions = listView.getCheckedItemPositions();
int itemCount = listView.getCount();
for(int i=itemCount-1; i >= 0; i--){
if(checkedItemPositions.get(i)){
str=list.get(i);
adapter.remove(str);
}
}
checkedItemPositions.clear();
adapter.notifyDataSetChanged();
adapter=null;
listView.setAdapter(adapter);
aManager.cancel(pIntent);
Toast.makeText(getApplicationContext(), "The alarm has been deleted successfully", Toast.LENGTH_SHORT).show();
startActivity(new Intent(modify_events_3.this,nav_draw.class));
}
});
} else {
adapter=null;
listView.setAdapter(adapter);
Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "No event was created", Snackbar.LENGTH_LONG);
snackbar.show();
}
}
}
我必须将项目写入文件吗?
解决方案
根据您所说的以及查看代码,该项目将重新出现在列表中。这是因为,当您重新加载活动时,会再次调用 onCreate() 方法,并执行 onCreate() 中的整个代码。这意味着您的列表被再次创建,适配器被再次初始化并且列表视图被再次填充。您对列表所做的任何更改都将持续到活动保持活动状态。
如果您希望即使在活动结束后也删除已删除的项目,您可以将列表项写入持久存储(数据库、共享首选项或内部/外部存储)(更多详细信息here)。这样,您所做的任何修改都可以保存在存储中,并在 onCreate 方法中从那里读回。
推荐阅读
- react-native-android - 无法解析模块“react-native-reanimated”
- java - 从 maven Central 获取 bot-java lib 的方法是什么
- c - 为什么结构的大小与结构指针的大小不同
- json - 如何使用 cl-json 库将 json-string 转换为“复杂”的 CLOS 对象?
- reactjs - 如何更改反应引导模式的背景颜色
- mysql - 在 H2 表和 ResultSet 之间进行 JOIN(从 MySQL 表中选择)
- android - 如果设备同时支持 armeabi-v7a 和 arm64-v8a 是否存在 playstore 服务的情况,或者我只能从两者中获得一个架构 apk
- html - CSS 网格中的神秘空白
- android - 没有从 USB 设备返回数据
- python - 自定义 RMSE 与取内置 Keras MSE 的根进行相同的预测不同