1

I want to add items to the listview underneath the edittext. This works perfectly.

Now I would like to be able to delete some entry's. Here is were I cant figure out how it is done. I was implementing the onclicklistener for the delete button but the program keeps crashing. I think this is because the delete button doesn't exist already. I tried finding stuff online but never have I gotten an answer that I could use. I you could help me out that would be a huge help.

PS: not all this code is from me, found some example code on: http://wptrafficanalyzer.in/blog/dynamically-add-items-to-listview-in-android/

Here is my main activity:

    /** 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);
    }
}

Here are my xml files: 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
9
  • 1
    Please add the full stacktrace from your logcat Commented Nov 12, 2012 at 16:33
  • del = (Button) findViewById(R.id.removeButton); <-- This will NEVER work before you call setContentView() Commented Nov 12, 2012 at 16:36
  • Also, how are you selecting what to delete? Commented Nov 12, 2012 at 16:37
  • got a delete button on every entery Commented Nov 12, 2012 at 16:39
  • could you update your code section to reflect your changes and point out the line that is throwing the exception? Commented Nov 12, 2012 at 17:19

1 Answer 1

1

The NullPointerException comes from the fact that you are setting the value of del before you set the content view for the activity. Move del = findViewById(id) after setContentView(view).

As for deleting stuff, you need to delete from the ADAPTER not a list. You don't need to keep your own copy of the items (unless you are using them for something else) because there is a list of item inside the array. you need to call adapter.remove(item) instead of list.remove(item)

Sign up to request clarification or add additional context in comments.

2 Comments

moved del = fiendViewById(id) after setContentView(view) also changed list. to adapter. still getting the same nullpointerexception
When I put the Onclicklistener between // the app doen't crash so I think the problem is somewhere in there.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.