-1

I create following codes to insert items to a listview. I will have a button to call the updateDisplay() method to insert the item and update the view. I add also the onclick of the listview to provide a check of the insert. However, the app crash when calling the updateDisplay(). The onclick works. What is wrong?

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main); // added back
    ListView listView = (ListView) findViewById(R.id.listView);
    String[] values = new String[] { "Android List View",
            "Adapter implementation", "Simple List View In Android",
            "Create List View Android", "Android Example",
            "List View Source Code", "List View Array Adapter",
            "Android Example List View" };

    final ArrayList<String> listItems = new ArrayList<String>();
    for (int i = 0; i < values.length; ++i) {
        listItems.add(values[i]);
    }

    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, android.R.id.text1,
            listItems);

    // Assign adapter to ListView
    listView.setAdapter(adapter);

    listView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

            final String item = (String) parent.getItemAtPosition(position);
            listItems.add(0, "Clicked : " + item);

            adapter.notifyDataSetChanged();

        }

    });
}

//
private void updateDisplay() {

    listItems.add(0, "Clicked : " + "my data");
    adapter.notifyDataSetChanged();

} 

code after debugging:

public class ButtonActivity extends Activity {
int count = 0;
ArrayList<String> listItems;
ArrayAdapter<String> adapter;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    values = new String[] { "Android List View", "Adapter implementation", "Simple List View In Android", "Create List View Android", "Android Example", "List View Source Code", "List View Array Adapter", "Android Example List View" }; listItems = new ArrayList<String>(); for (int i = 0; i < values.length; ++i) { listItems.add(values[i]); } adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, listItems); // Assign adapter to ListView listView.setAdapter(adapter); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { final String item = (String) parent.getItemAtPosition(position); listItems.add(0, "Clicked : " + item); adapter.notifyDataSetChanged(); } }); } // private void updateDisplay() { listItems.add(0, "Clicked : " + "my data"); adapter.notifyDataSetChanged(); }
    ListView listView = (ListView) findViewById(R.id.listView);
    String[] values = new String[] { "Android List View",
            "Adapter implementation", "Simple List View In Android",
            "Create List View Android", "Android Example",
            "List View Source Code", "List View Array Adapter",
            "Android Example List View" };

    listItems = new ArrayList<String>();
    for (int i = 0; i < values.length; ++i) {
        listItems.add(values[i]);
    }

   adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, android.R.id.text1,
            listItems);

    // Assign adapter to ListView
    listView.setAdapter(adapter);

    listView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

            final String item = (String) parent.getItemAtPosition(position);
            listItems.add(0, "Clicked : " + item);

            adapter.notifyDataSetChanged();

        }

    });

    final Button button = (Button) findViewById(R.id.button);

    button.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            button.setText("Got Pressed:" + ++count);
            updateDisplay();


        }
    });
}
private void updateDisplay() {

    listItems.add(0, "Clicked : " + "my data");
    adapter.notifyDataSetChanged();
} 
}
Chand Priyankara
  • 6,739
  • 2
  • 40
  • 63
user2911996
  • 63
  • 1
  • 2
  • 10
  • Please post your logcat error. – GrIsHu Jan 31 '15 at 04:48
  • 1
    Where is your `setContentView()` method? Your `adapter` variable not accessible for `updateDisplay()` method. you need to make it global. – Piyush Jan 31 '15 at 04:52
  • E/AndroidRuntime(14870): FATAL EXCEPTION: main E/AndroidRuntime(14870): Process: Value.GetValue, PID: 14870 E/AndroidRuntime(14870): java.lang.NullPointerException E/AndroidRuntime(14870): at aValue.ValueGetValueActivity.updateDisplay(ValueGetValueActivity.java:679) E/AndroidRuntime(14870): at aValue.ValueGetValueActivity.access$1(ValueGetValueActivity.java:601) E/AndroidRuntime(14870): at aValue.ValueGetValueActivity$5.updateValue(ValueGetValueActivity.java:268) E/AndroidRuntime(14870): at aValue.ValueGetValueActivity$5.onValueChanged(ValueGetValueActivity.java:245) – user2911996 Jan 31 '15 at 04:59
  • carsh at these two lines: listItems.add(0, "Clicked : " + "my data"); adapter.notifyDataSetChanged(); – user2911996 Jan 31 '15 at 05:01
  • "Your adapter variable not accessible for updateDisplay() method. you need to make it global." I have forced to use a final keyword. How to make it global? thanks – user2911996 Jan 31 '15 at 05:05
  • You need to make it global at declaration part before onCreate() method and also for your listitems. – Piyush Jan 31 '15 at 05:10
  • Would you please give the codes? I try it but does not seem to work. private ArrayList listItems = new ArrayList(); private ArrayAdapter adapter ; – user2911996 Jan 31 '15 at 05:13
  • You need to use this code http://pastie.org/9875526 – Piyush Jan 31 '15 at 05:15
  • Gupta is correct. Moving the variable inside the activity as global. I provide a runnable version of the testing code after debugged. – user2911996 Jan 31 '15 at 06:47

1 Answers1

0

here your array list in empty ... this this methos .. may this help full

String [] strings = new String [] {"value 1", "value 2","value 3" };
List<String> listItems = new ArrayList<String>(Arrays.asList(strings));