2015-09-08 4 views
1

У меня есть деятельность, в которой она имеет кнопку, по нажатию кнопки приложение падает проблема на линии adapter.remove(list.get(i));NullPointerException в ListView Android

Logcat подробно упомянуть NullPointerException на данной линии adapter.remove(list.get(i));

package com.example.veeresh.myphotogallery; 

    import android.app.ListActivity; 
    import android.os.Bundle; 
    import android.util.SparseBooleanArray; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
    import android.widget.ArrayAdapter; 
    import android.widget.Button; 
    import android.widget.EditText; 

    import java.util.ArrayList; 

    public class MainActivity extends ListActivity { 

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

/** Declaring an ArrayAdapter to set items to ListView */ 
ArrayAdapter 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.activity_main); 

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

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

    /** Defining the ArrayAdapter to set items to ListView */ 
    adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_multiple_choice, list); 
    adapter.add("Item 1"); 

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

    /** Defining a click event listener for the button "Delete" */ 
    OnClickListener listenerDel = new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      /** Getting the checked items from the listview */ 
      SparseBooleanArray checkedItemPositions = getListView().getCheckedItemPositions(); 
      int itemCount = getListView().getCount(); 

      for(int i=itemCount-1; i >= 0; i--) 
      { 
       if(checkedItemPositions.get(i)){ 
        adapter.remove(list.get(i)); 
       } 
      } 
      checkedItemPositions.clear(); 
      adapter.notifyDataSetChanged(); 
     } 
    }; 

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

    /** Setting the event listener for the delete button */ 
    btnDel.setOnClickListener(listenerDel); 

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

опубликовать сообщение об ошибке LogCat здесь ... может быть ваш адаптер или список должен быть пустым –

+0

Java. lang.NullPointerException at com.example.veeresh.myphotogallery.MainActivity $ 2.onClick (MainActivity.java:61) –

+0

Возможный дубликат [Что такое исключение Null Pointer Exception и как его исправить?] (http: // stackoverflow .com/вопросы/218384 /, что-это-нуль-указатель -exception-and-how-do-i-fix-it) – Albireo

ответ

2

Ваш адаптер содержит список, а ваш MainActivity содержит другой список.

Вы добавляете элементы в свой адаптер, однако это не добавьте элементы в список в своей основной деятельности. Список в вашем адаптере содержит «Item 1», но в списке в MainActivity нет.

OnClick вы пытаетесь получить элемент из списка в вашем MainActivity, который не содержит элемент, который вы пытаетесь получить, следовательно NullPointerException

Вы должны добавить или удалить элементы из списка, а затем call adapter.notifyDataSetChanged();

Try:

//add an item 
list.add("item 1"); 
adapter.notifyDataSetChanged(); 



//remove an item 
list.remove(i); 
adapter.notifyDataSetChanged(); 
+0

Итак, какое решение здесь –

+0

Я отредактировал свой ответ, дайте мне знать, если он работает –

+0

Нет, он снова сработает –

0

Я считаю, что вы должны изменить свою проблемную линию с этим:

adapter.remove(list.getAdapter().getItem((checkedItemPositions.keyAt(i))); 
Смежные вопросы