Java 列表视图项不是';不要被删除
我正在使用Java 列表视图项不是';不要被删除,java,android,listview,sharedpreferences,Java,Android,Listview,Sharedpreferences,我正在使用SharedReferences存储listview项,如下所示。但是,即使我从SharedReferences中删除了该项目,listview项目也不会被删除。即使我将其删除,该项目仍会继续显示。我该如何解决这个问题 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.events_wee
SharedReferences
存储listview项,如下所示。但是,即使我从SharedReferences
中删除了该项目,listview项目也不会被删除。即使我将其删除,该项目仍会继续显示。我该如何解决这个问题
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);
modify=(Button)findViewById(R.id.button10);
delete=(Button)findViewById(R.id.button11);
final String arr[]=new String[10];
sp = getSharedPreferences(USER_PREF, Context.MODE_PRIVATE);
final SharedPreferences.Editor editor = sp.edit();
list.add(s3);
editor.putString(KEY_NAME, s3);
editor.apply();
editor.commit();
adapter = new ArrayAdapter<String>(modify_events_3.this,
android.R.layout.simple_list_item_multiple_choice, list);
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
listView.setAdapter(adapter);
modify.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
clicked=true;
SparseBooleanArray checked =
listView.getCheckedItemPositions();
ArrayList<String> selectedItems = new ArrayList<String>();
for( i=0;i<checked.size();i++) {
int position;
position = checked.keyAt(i);
if (checked.valueAt(i))
selectedItems.add(adapter.getItem(position));
for ( j = 0; j < arr.length; j++) {
str = listView.getItemAtPosition(i).toString();
str = arr[j];
}
}
startActivity(new
Intent(modify_events_3.this,Pop_up.class));
Toast.makeText(getApplicationContext(), "Have anything
else in mind? ;)", Toast.LENGTH_SHORT).show();
}
});
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
checkedItemPositions = listView.getCheckedItemPositions();
int itemCount = listView.getCount();
for( i=itemCount-1; i >= 0; i--){
if(checkedItemPositions.get(i)){
str=list.get(i);
adapter.remove(str);
}
}
checkedItemPositions.clear();
adapter.notifyDataSetChanged();
editor.remove(KEY_NAME);
listView.setAdapter(adapter);
}
});
editor.apply();
editor.commit();
}
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.events\u week);
listView=(listView)findViewById(R.id.listView);
textView=(textView)findViewById(R.id.textView);
修改=(按钮)findViewById(R.id.button10);
delete=(按钮)findviewbyd(R.id.button11);
最终字符串arr[]=新字符串[10];
sp=getSharedReferences(用户优先,上下文模式优先);
最终SharedReferences.Editor=sp.edit();
增加(s3);
编辑器.putString(键名称,s3);
editor.apply();
commit();
适配器=新阵列适配器(修改事件3,
android.R.layout.simple\u list\u item\u多选,list);
listView.setChoiceMode(listView.CHOICE\u MODE\u MULTIPLE);
setAdapter(适配器);
modify.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
单击=真;
SparseBooleanArray已选中=
getCheckEditePositions();
ArrayList selectedItems=新建ArrayList();
对于(i=0;i=0;i--){
if(checkedItemPositions.get(i)){
str=list.get(i);
适配器。移除(str);
}
}
checkedItemPositions.clear();
adapter.notifyDataSetChanged();
编辑器。删除(键名称);
setAdapter(适配器);
}
});
editor.apply();
commit();
}
尝试从列表中删除该项目,然后执行notifiyDatasetChanged()
ListView
显示存储在ArrayList
中的一些数据。
当element remove或add-inArrayList
时,您必须告诉列表数据源已更改以显示新数据。
因此,这就是notifyDatasetChanged()
的作用。它告诉列表视图
数据已被修改,因此请反映更改的数据。我知道,但我只是告诉他在从列表中删除项后应用NotifyDataSetChange,而不是从适配器中删除项。由于适配器已关闭,他不需要更新适配器中的列表。notifydatasetchanged()可以吗?我解释一下notifydatasetchanged是如何工作的。你是说列表。删除(str)
?是的,你应该从列表中删除该项目