揭秘在ListView等AdapterView上动态添加删除项的陷阱

2019-12-10 18:17:33王振洲
今天遇到这么个需求,需要在运行时动态添加ListView的item,看起来很简单,实际操作过程中却遇到了麻烦,下面揭秘在ListView等AdapterView上动态添加删除项的陷阱  

如何避开在ListView等AdapterView上动态添加删除项的陷阱,下面就为大家分享,具体内容如下

首先,定义如下array资源,作为列表的加载内容:

<resources>
 <string name="app_name">MyListView</string>
 <string-array name="language">
 <item>Java</item>
 <item>C</item>
 <item>C++</item>
 <item>PHP</item>
 </string-array>

  然后简单地写下布局文件,由于我需要不管列表有多长,始终在底部显示编辑框和按钮,所以将ListView中的layout_weight设为1。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://www.easck.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical">
 <ListView
 android:id="@android:id/list"
 android:layout_width="fill_parent"
 android:layout_height="0dip"
 android:layout_weight="1" />
 <LinearLayout
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:orientation="horizontal">
 <EditText
  android:id="@+id/addLangEdit"
  android:layout_width="200px"
  android:layout_height="wrap_content" />
 <Button 
  android:id="@+id/addButton"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="添加" />
 </LinearLayout>
</LinearLayout>

  最后添上Activity的代码,似乎没什么问题了,运行一下。

public class MyListView extends ListActivity {
 private ArrayAdapter<CharSequence> mAdapter;
 private ListView mListView;
 private EditText mLanguageText;
 private Button mAddButton;
 
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.mylist1);
 
 //get the view
 mListView = getListView();
 mLanguageText = (EditText) findViewById(R.id.addLangEdit);
 mAddButton = (Button) findViewById(R.id.addButton);
 
 //array adapter created from string array resources
 mAdapter = ArrayAdapter.createFromResource(
  this, 
  R.array.language, 
  android.R.layout.simple_list_item_1);
 //set the adapter
 mListView.setAdapter(mAdapter);
 
 //add listener
 mAddButton.setOnClickListener(mOnClickListener);
 }
 
 private OnClickListener mOnClickListener = new View.OnClickListener() {
 @Override
 public void onClick(View v) {
  String text = mLanguageText.getText().toString();
  if(null == text || "".equals(text.trim())) {
  Toast.makeText(MyListView.this, "输入不能为空", Toast.LENGTH_SHORT).show();
  }else {
  mAdapter.add(text);
  mAdapter.notifyDataSetChanged();
  mLanguageText.setText("");
  }
 }
 };
}