如何使用删除按钮android从列表视图中删除项目

时间:2012-11-12 16:26:48

标签: android listview

我想在edittext下面的listview中添加项目。 这非常有效。

现在我希望能够删除一些条目。这是我无法弄清楚它是如何完成的。我正在为删除按钮实现onclicklistener,但程序不断崩溃。我认为这是因为删除按钮已经不存在了。 我尝试在网上找东西,但从来没有得到我可以使用的答案。 我可以帮助我,这将是一个巨大的帮助。

PS:并非所有这些代码都来自我,在http://wptrafficanalyzer.in/blog/dynamically-add-items-to-listview-in-android/

上找到了一些示例代码

这是我的主要活动:

    /** Note that here we are inheriting ListActivity class instead of Activity class **/
    public class MainActivity extends ListActivity {
    Button del;
    ListView lv;

    /** Items entered by the user is stored in this ArrayList variable */
    ArrayList<String> list = new ArrayList<String>();





    /** Declaring an ArrayAdapter to set items to ListView */
    ArrayAdapter<String> adapter;


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);







        /** Setting a custom layout for the list activity */
        setContentView(R.layout.main);

        del = (Button) findViewById(R.id.removeButton);

        /** Reference to the button of the layout main.xml */
        Button btn = (Button) findViewById(R.id.btnAdd);

        /** Defining the ArrayAdapter to set items to ListView */
        adapter = new ArrayAdapter<String>(this, R.layout.item, R.id.nameText, list);

        /** Defining a click event listener for the button "Add" */
        OnClickListener listener = new OnClickListener() {
            @Override
            public void onClick(View v) {
                EditText edit = (EditText) findViewById(R.id.txtItem);
                list.add(edit.getText().toString());
                edit.setText("");
                adapter.notifyDataSetChanged();

            }
        };



        del.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                int pos = v.getId();
                System.out.println(pos);
                Object toRemove = adapter.getItem(pos);
                adapter.remove(toRemove);
            }
        });


        /** Setting the event listener for the add button */
        btn.setOnClickListener(listener);

        /** Setting the adapter to the ListView */
        setListAdapter(adapter);
    }
}

以下是我的xml文件: main.xml中

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/txtItem"
        android:layout_width="240dp"
        android:layout_height="wrap_content"
        android:inputType="text"
        android:hint="@string/hintTxtItem"
    />

    <Button
        android:id="@+id/btnAdd"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/lblBtnAdd"
        android:layout_toRightOf="@id/txtItem"
        android:onClick="removeAtomPayOnClickHandler"

    />

    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/txtItem"
    />

    <TextView
        android:id="@android:id/empty"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/txtItem"
        android:text="@string/txtEmpty"
        android:gravity="center_horizontal"
    />



</RelativeLayout>

item.xml

 <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >


   <TextView 
    android:id="@+id/nameText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="15dp"
    android:textSize="20sp" >


   </TextView>

   <Button
    android:id="@+id/removeButton"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="@string/remove"
  android:layout_alignParentRight="true"

   />

  </RelativeLayout>

logcat的:

11-12 17:37:57.637: D/AndroidRuntime(302): Shutting down VM
11-12 17:37:57.637: W/dalvikvm(302): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
11-12 17:37:57.667: E/AndroidRuntime(302): FATAL EXCEPTION: main
11-12 17:37:57.667: E/AndroidRuntime(302): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.additemsdynami/com.example.additemsdynami.MainActivity}: java.lang.NullPointerException
11-12 17:37:57.667: E/AndroidRuntime(302):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
11-12 17:37:57.667: E/AndroidRuntime(302):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
11-12 17:37:57.667: E/AndroidRuntime(302):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
11-12 17:37:57.667: E/AndroidRuntime(302):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
11-12 17:37:57.667: E/AndroidRuntime(302):  at android.os.Handler.dispatchMessage(Handler.java:99)
11-12 17:37:57.667: E/AndroidRuntime(302):  at android.os.Looper.loop(Looper.java:123)
11-12 17:37:57.667: E/AndroidRuntime(302):  at android.app.ActivityThread.main(ActivityThread.java:4627)
11-12 17:37:57.667: E/AndroidRuntime(302):  at java.lang.reflect.Method.invokeNative(Native Method)
11-12 17:37:57.667: E/AndroidRuntime(302):  at java.lang.reflect.Method.invoke(Method.java:521)
11-12 17:37:57.667: E/AndroidRuntime(302):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-12 17:37:57.667: E/AndroidRuntime(302):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-12 17:37:57.667: E/AndroidRuntime(302):  at dalvik.system.NativeStart.main(Native Method)
11-12 17:37:57.667: E/AndroidRuntime(302): Caused by: java.lang.NullPointerException
11-12 17:37:57.667: E/AndroidRuntime(302):  at com.example.additemsdynami.MainActivity.onCreate(MainActivity.java:69)
11-12 17:37:57.667: E/AndroidRuntime(302):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-12 17:37:57.667: E/AndroidRuntime(302):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
11-12 17:37:57.667: E/AndroidRuntime(302):  ... 11 more

1 个答案:

答案 0 :(得分:1)

NullPointerException来自于在为活动设置内容视图之前设置del的值这一事实。在del = findViewById(id)之后移动setContentView(view)

至于删除内容,您需要从ADAPTER中删除不是列表。您不需要保留自己的项目副本(除非您将其用于其他项目),因为数组中有一个项目列表。您需要致电adapter.remove(item)而不是list.remove(item)

相关问题