I'm making an android to do list app called list track, right now I'm still working on the basics of the app. Anyway I made a context menu for the list view, the context menu only has 1 option, "remove", its meant to remove an item from the list but, when the "remove" option is clicked, the app crashes. I tried running it without the .notifyDataSetChanged() and it worked but I have to click the "add" button before the item is removed, which causes a whole lot of problems. Here's the code:
package com.drift.listtrack;
import android.app.*;
import android.os.*;
import android.widget.*;
import java.util.*;
import android.view.View.*;
import android.view.*;
import android.view.Menu;
import android.view.MenuItem;
import android.view.ContextMenu;
import android.widget.AdapterView;
import android.view.ContextMenu.*;
public class MainActivity extends Activity
{
private ArrayList<String> todoItems;
private ListView list;
private EditText items;
private ArrayAdapter<String> aa;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
list= (ListView) findViewById(R.id.list);
items= (EditText) findViewById(R.id.items);
Button enter=(Button) findViewById(R.id.enter);
todoItems= new ArrayList<String>();
int resID=R.layout.listrack_item;
final ArrayAdapter<String> aa=new ArrayAdapter<String>(this, resID, todoItems);
list.setAdapter(aa);
enter.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
todoItems.add(0,items.getText().toString());
aa.notifyDataSetChanged();
items.setText("");
}
});
registerForContextMenu(list);
}
static final private int REMOVE_TODO= Menu.FIRST;
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)
{
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("Options");
menu.add(0, REMOVE_TODO, Menu.NONE, R.string.remove);
}
@Override
public boolean onContextItemSelected(MenuItem item)
{
// TODO: Implement this method
super.onContextItemSelected(item);
switch (item.getItemId()){
case (REMOVE_TODO):{
AdapterView.AdapterContextMenuInfo menuInfo;
menuInfo=(AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
int index=menuInfo.position;
removeItem(index);
return true;
}
}
return false;
}
private void removeItem(int _index){
todoItems.remove(_index);
aa.notifyDataSetChanged();
}
}
And here's my logcat
12-14 19:16:30.155 4786 4786 D dalvikvm Late-enabling CheckJNI
12-14 19:16:30.575 4786 4786 D dalvikvm GC_FOR_ALLOC freed 74K, 10% free 7092K/7875K, paused 19ms, total 19ms
12-14 19:16:30.580 4786 4786 I dalvikvm-heap Grow heap (frag case) to 8.550MB for 1048592-byte allocation
12-14 19:16:30.600 4786 4816 D dalvikvm GC_FOR_ALLOC freed <1K, 10% free 8116K/8967K, paused 21ms, total 21ms
12-14 19:16:30.615 4786 4788 D dalvikvm GC_CONCURRENT freed 3K, 10% free 8116K/8967K, paused 2ms+1ms, total 13ms
12-14 19:16:30.665 4786 4786 D AbsListView Get MotionRecognitionManager
12-14 19:16:30.880 4786 4786 D libEGL loaded /system/lib/egl/libEGL_mali.so
12-14 19:16:30.885 4786 4786 D libEGL loaded /system/lib/egl/libGLESv1_CM_mali.so
12-14 19:16:30.890 4786 4786 D libEGL loaded /system/lib/egl/libGLESv2_mali.so
12-14 19:16:30.895 4786 4786 D Device driver API match
12-14 19:16:30.895 4786 4786 D Device driver API version: 10
12-14 19:16:30.895 4786 4786 D User space API version: 10
12-14 19:16:30.895 4786 4786 D mali: REVISION=Linux-r2p4-02rel0 BUILD_DATE=Tue Oct 16 15:37:13 KST 2012
12-14 19:16:30.965 4786 4786 D OpenGLRenderer Enabling debug mode 0
12-14 19:16:30.970 4786 4786 E SensorManager thread start
12-14 19:16:30.970 4786 4786 D SensorManager registerListener :: handle = 0 name= LSM330DLC 3-axis Accelerometer delay= 200000 Listener= android.view.OrientationEventListener$SensorEventListenerImpl@41798610
12-14 19:16:32.920 4786 4786 D SensorManager unregisterListener:: Listener= android.view.OrientationEventListener$SensorEventListenerImpl@41798610
12-14 19:16:32.920 4786 4786 D Sensors Remain listener = Sending .. normal delay 200ms
12-14 19:16:32.920 4786 4786 I Sensors sendDelay --- 200000000
12-14 19:16:32.925 4786 4786 D SensorManager JNI - sendDelay
12-14 19:16:32.930 4786 4786 I SensorManager Set normal delay = true
12-14 19:16:34.520 4786 4786 W IInputConnectionWrapper showStatusIcon on inactive InputConnection
12-14 19:16:30.155 4786 4786 D dalvikvm Late-enabling CheckJNI
12-14 19:16:30.575 4786 4786 D dalvikvm GC_FOR_ALLOC freed 74K, 10% free 7092K/7875K, paused 19ms, total 19ms
12-14 19:16:30.580 4786 4786 I dalvikvm-heap Grow heap (frag case) to 8.550MB for 1048592-byte allocation
12-14 19:16:30.600 4786 4816 D dalvikvm GC_FOR_ALLOC freed <1K, 10% free 8116K/8967K, paused 21ms, total 21ms
12-14 19:16:30.615 4786 4788 D dalvikvm GC_CONCURRENT freed 3K, 10% free 8116K/8967K, paused 2ms+1ms, total 13ms
12-14 19:16:30.665 4786 4786 D AbsListView Get MotionRecognitionManager
12-14 19:16:30.880 4786 4786 D libEGL loaded /system/lib/egl/libEGL_mali.so
12-14 19:16:30.885 4786 4786 D libEGL loaded /system/lib/egl/libGLESv1_CM_mali.so
12-14 19:16:30.890 4786 4786 D libEGL loaded /system/lib/egl/libGLESv2_mali.so
12-14 19:16:30.895 4786 4786 D Device driver API match
12-14 19:16:30.895 4786 4786 D Device driver API version: 10
12-14 19:16:30.895 4786 4786 D User space API version: 10
12-14 19:16:30.895 4786 4786 D mali: REVISION=Linux-r2p4-02rel0 BUILD_DATE=Tue Oct 16 15:37:13 KST 2012
12-14 19:16:30.965 4786 4786 D OpenGLRenderer Enabling debug mode 0
12-14 19:16:30.970 4786 4786 E SensorManager thread start
12-14 19:16:30.970 4786 4786 D SensorManager registerListener :: handle = 0 name= LSM330DLC 3-axis Accelerometer delay= 200000 Listener= android.view.OrientationEventListener$SensorEventListenerImpl@41798610
12-14 19:16:32.920 4786 4786 D SensorManager unregisterListener:: Listener= android.view.OrientationEventListener$SensorEventListenerImpl@41798610
12-14 19:16:32.920 4786 4786 D Sensors Remain listener = Sending .. normal delay 200ms
12-14 19:16:32.920 4786 4786 I Sensors sendDelay --- 200000000
12-14 19:16:32.925 4786 4786 D SensorManager JNI - sendDelay
12-14 19:16:32.930 4786 4786 I SensorManager Set normal delay = true
12-14 19:16:34.520 4786 4786 W IInputConnectionWrapper showStatusIcon on inactive InputConnection
12-14 19:17:19.575 8036 8036 D dalvikvm DexOpt: load 22ms, verify+opt 34ms, 316316 bytes
12-14 19:17:53.365 9751 9751 D dalvikvm com.drift.listtrack Late-enabling CheckJNI
12-14 19:17:53.645 9751 9751 D dalvikvm com.drift.listtrack GC_FOR_ALLOC freed 78K, 10% free 7092K/7875K, paused 23ms, total 24ms
12-14 19:17:53.645 9751 9751 I dalvikvm-heap com.drift.listtrack Grow heap (frag case) to 8.550MB for 1048592-byte allocation
12-14 19:17:53.670 9751 9753 D dalvikvm com.drift.listtrack GC_CONCURRENT freed 2K, 10% free 8114K/8967K, paused 2ms+2ms, total 20ms
12-14 19:17:53.670 9751 9751 D dalvikvm com.drift.listtrack WAIT_FOR_CONCURRENT_GC blocked 11ms
12-14 19:17:53.670 9751 9770 D dalvikvm com.drift.listtrack WAIT_FOR_CONCURRENT_GC blocked 8ms
12-14 19:17:53.755 9751 9751 D AbsListView com.drift.listtrack Get MotionRecognitionManager
12-14 19:17:53.820 9751 9751 D libEGL com.drift.listtrack loaded /system/lib/egl/libEGL_mali.so
12-14 19:17:53.825 9751 9751 D libEGL com.drift.listtrack loaded /system/lib/egl/libGLESv1_CM_mali.so
12-14 19:17:53.825 9751 9751 D libEGL com.drift.listtrack loaded /system/lib/egl/libGLESv2_mali.so
12-14 19:17:53.830 9751 9751 D com.drift.listtrack Device driver API match
12-14 19:17:53.830 9751 9751 D com.drift.listtrack Device driver API version: 10
12-14 19:17:53.830 9751 9751 D com.drift.listtrack User space API version: 10
12-14 19:17:53.830 9751 9751 D com.drift.listtrack mali: REVISION=Linux-r2p4-02rel0 BUILD_DATE=Tue Oct 16 15:37:13 KST 2012
12-14 19:17:53.875 9751 9751 D OpenGLRenderer com.drift.listtrack Enabling debug mode 0
12-14 19:17:53.880 9751 9751 E SensorManager com.drift.listtrack thread start
12-14 19:17:53.880 9751 9751 D SensorManager com.drift.listtrack registerListener :: handle = 0 name= LSM330DLC 3-axis Accelerometer delay= 200000 Listener= android.view.OrientationEventListener$SensorEventListenerImpl@417b9bb8
12-14 19:18:00.040 9751 9751 D AbsListView com.drift.listtrack Get MotionRecognitionManager
12-14 19:18:00.105 9751 9753 D dalvikvm com.drift.listtrack GC_CONCURRENT freed 110K, 9% free 8432K/9223K, paused 3ms+3ms, total 24ms
12-14 19:18:00.225 9751 9751 D SensorManager com.drift.listtrack unregisterListener:: Listener= android.view.OrientationEventListener$SensorEventListenerImpl@417b9bb8
12-14 19:18:00.225 9751 9751 D Sensors com.drift.listtrack Remain listener = Sending .. normal delay 200ms
12-14 19:18:00.225 9751 9751 I Sensors com.drift.listtrack sendDelay --- 200000000
12-14 19:18:00.225 9751 9751 D SensorManager com.drift.listtrack JNI - sendDelay
12-14 19:18:00.225 9751 9751 I SensorManager com.drift.listtrack Set normal delay = true
12-14 19:18:00.900 9751 9751 D AndroidRuntime com.drift.listtrack Shutting down VM
12-14 19:18:00.900 9751 9751 W dalvikvm com.drift.listtrack threadid=1: thread exiting with uncaught exception (group=0x410352a0)
12-14 19:18:00.905 9751 9751 E AndroidRuntime com.drift.listtrack FATAL EXCEPTION: main
12-14 19:18:00.905 9751 9751 E AndroidRuntime com.drift.listtrack java.lang.NullPointerException
12-14 19:18:00.905 9751 9751 E AndroidRuntime com.drift.listtrack at com.drift.listtrack.MainActivity.removeItem(MainActivity.java:95)
12-14 19:18:00.905 9751 9751 E AndroidRuntime com.drift.listtrack at com.drift.listtrack.MainActivity.onContextItemSelected(MainActivity.java:80)
12-14 19:18:00.905 9751 9751 E AndroidRuntime com.drift.listtrack at android.app.Activity.onMenuItemSelected(Activity.java:2629)
12-14 19:18:00.905 9751 9751 E AndroidRuntime com.drift.listtrack at com.android.internal.policy.impl.PhoneWindow$DialogMenuCallback.onMenuItemSelected(PhoneWindow.java:4034)
12-14 19:18:00.905 9751 9751 E AndroidRuntime com.drift.listtrack at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
12-14 19:18:00.905 9751 9751 E AndroidRuntime com.drift.listtrack at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149)
12-14 19:18:00.905 9751 9751 E AndroidRuntime com.drift.listtrack at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
12-14 19:18:00.905 9751 9751 E AndroidRuntime com.drift.listtrack at com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:193)
12-14 19:18:00.905 9751 9751 E AndroidRuntime com.drift.listtrack at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:934)
12-14 19:18:00.905 9751 9751 E AndroidRuntime com.drift.listtrack at android.widget.AdapterView.performItemClick(AdapterView.java:301)
12-14 19:18:00.905 9751 9751 E AndroidRuntime com.drift.listtrack at android.widget.AbsListView.performItemClick(AbsListView.java:1287)
12-14 19:18:00.905 9751 9751 E AndroidRuntime com.drift.listtrack at android.widget.AbsListView$PerformClick.run(AbsListView.java:3078)
12-14 19:18:00.905 9751 9751 E AndroidRuntime com.drift.listtrack at android.widget.AbsListView$1.run(AbsListView.java:4161)
12-14 19:18:00.905 9751 9751 E AndroidRuntime com.drift.listtrack at android.os.Handler.handleCallback(Handler.java:615)
12-14 19:18:00.905 9751 9751 E AndroidRuntime com.drift.listtrack at android.os.Handler.dispatchMessage(Handler.java:92)
12-14 19:18:00.905 9751 9751 E AndroidRuntime com.drift.listtrack at android.os.Looper.loop(Looper.java:137)
12-14 19:18:00.905 9751 9751 E AndroidRuntime com.drift.listtrack at android.app.ActivityThread.main(ActivityThread.java:4921)
12-14 19:18:00.905 9751 9751 E AndroidRuntime com.drift.listtrack at java.lang.reflect.Method.invokeNative(Native Method)
12-14 19:18:00.905 9751 9751 E AndroidRuntime com.drift.listtrack at java.lang.reflect.Method.invoke(Method.java:511)
12-14 19:18:00.905 9751 9751 E AndroidRuntime com.drift.listtrack at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
12-14 19:18:00.905 9751 9751 E AndroidRuntime com.drift.listtrack at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
12-14 19:18:00.905 9751 9751 E AndroidRuntime com.drift.listtrack at dalvik.system.NativeStart.main(Native Method)
Could someone tell me how to fix this, I think I may have misused the notifyDataSetChanged(). Thanks
You get a NullPointerException because aa object (in the class) is null. The reason is that in onCreate you create another aa object (arraylist) with the same name. You need to assign arraylist to the class variable.
Try: aa=new ArrayAdapter(this, resID, todoItems);