Android 从列表视图中删除项目后,刷新列表视图不起作用
我的应用程序有一个bug。我正确地在列表视图中添加了项目,并且列表视图自动刷新以从列表视图中删除项目,这也可以正常工作,但是如果我添加项目并删除,则刷新不起作用。对不起,如果我的英语有问题,请在评论中询问。事实上,我想在列表视图中添加项目并按下按钮,因此我希望列表视图刷新。所以我使用adapter.notifyDataSetChanged;若我点击一个项目,它就会从列表中删除。我的问题是从列表中删除一个项目后自动刷新不起作用。 XML代码Android 从列表视图中删除项目后,刷新列表视图不起作用,android,listview,Android,Listview,我的应用程序有一个bug。我正确地在列表视图中添加了项目,并且列表视图自动刷新以从列表视图中删除项目,这也可以正常工作,但是如果我添加项目并删除,则刷新不起作用。对不起,如果我的英语有问题,请在评论中询问。事实上,我想在列表视图中添加项目并按下按钮,因此我希望列表视图刷新。所以我使用adapter.notifyDataSetChanged;若我点击一个项目,它就会从列表中删除。我的问题是从列表中删除一个项目后自动刷新不起作用。 XML代码 <?xml version="1.0" encod
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/edit_test"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="numberSigned" >
<requestFocus />
</EditText>
<Button
android:id="@+id/btn_test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
java代码:
public class Test extends ListActivity {
List<String> list = new ArrayList<String>();
String bbc = "";
String bbc2 = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
Button btn = (Button) findViewById(R.id.btn_test);
final Spinner aminika = (Spinner) findViewById(R.id.spinner1);
final EditText edit = (EditText) findViewById(R.id.edit_test);
//for spinner
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.all_test));
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
aminika.setAdapter(dataAdapter);
//for listview
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, list);
setListAdapter(adapter);
//=================================================
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
//=====
bbc = String.valueOf(aminika.getSelectedItem());
bbc2 = edit.getText().toString();
list.add(bbc + " " + bbc2);
edit.setText("");
adapter.notifyDataSetChanged();
//''''''''''''''''''''''''''''''''''''''
}
});
}
@Override
protected void onListItemClick(ListView l, View v, final int position, long id) {
super.onListItemClick(l, v, position, id);
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, list);
setListAdapter(adapter);
//=============================
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
Test.this);
// set title
alertDialogBuilder.setTitle("Your Title");
// set dialog message
alertDialogBuilder
.setMessage("Click yes to remove!")
.setCancelable(true)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
// if this button is clicked, close
// current activity
String item = (String) getListAdapter().getItem(position);
list.remove(item);
adapter.notifyDataSetChanged();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
// if this button is clicked, just close
// the dialog box and do nothing
dialog.cancel();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder.create();
// show it
alertDialog.show();
//=====================================
}
}
我的错误是什么?是否有一个固定字符串数组,每次单击都会再次填充列表 在这里: 我建议您在当前会话期间使用arraylist保存新旧数据。
每次活动打开时,此列表将被保留或返回原始列表?您不应在onListItemClick中创建和设置新适配器。而不是
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, list);
setListAdapter(adapter);
这样做的方式是,在旧适配器实例上调用notifyDataSetChanged in onClick,该实例不再是ListView的适配器,因为您在onListItemClick中创建并分配了一个新实例。
这将解释为什么在添加元素后更新ListView在第一次删除后不起作用。不过,我还没有试过。我没有保存任何更改,我希望它恢复到原始形式
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, list);
setListAdapter(adapter);
final ListAdapter adapter = l.getAdapter();