Я реализовал простой метод для удаления нескольких элементов из списка, следуя этому решению Removing muliple items from listview using Check box in Android, а затем немного изменил его, чтобы разрешить оператор switch для двух событий нажатия кнопок, add
& delete
. Но проблема в том, что я нажимаю кнопка удаления, с которой произошли ошибки приложения: http://pastebin.com/2NmCQk2BКак удалить несколько выбранных позиций из списка?
Я не уверен, почему я получаю исключение нулевого указателя, поскольку, как я полагаю, я все правильно присвоил.
Может кто-нибудь лучше объяснить, почему я могу получить эту ошибку? Или, возможно, лучший способ удаления выбранных позиций из списка?
Полный класс размещен ниже для лучшего понимания:
public class TopRatedFragment extends Fragment implements OnClickListener {
ListView mListView;
EditText mValue;
Button mAdd,mDel;
ArrayList<String> list = new ArrayList<String>();
ArrayAdapter<String> adapter;
SparseBooleanArray mCheckStates ;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_top_rated, container, false);
mAdd = (Button)rootView.findViewById(R.id.newList);
mDel = (Button)rootView.findViewById(R.id.delBtn);
mAdd.setOnClickListener(this);
mDel.setOnClickListener(this);
mValue = (EditText)rootView.findViewById(R.id.listData);
adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_expandable_list_item_1, list);
// set the lv variable to your list in the xml
mListView=(ListView)rootView.findViewById(R.id.listView);
mListView.setAdapter(adapter);
return rootView;
}
public void onClick(View v)
{
switch(v.getId()){
case R.id.newList:
//DO something
String input = mValue.getText().toString();
if(input.length() > 0)
{
// add string to the adapter, not the listview
adapter.add(input);
// no need to call adapter.notifyDataSetChanged(); as it is done by the adapter.add() method
}
break;
case R.id.delBtn:
//DO something
SparseBooleanArray checked = mListView.getCheckedItemPositions();
for (int i = 0; i < mListView.getCount(); i++){
//line 65
if (checked.get(i)==true)
{
list.remove(i);
}
adapter.notifyDataSetChanged();
}
mListView.clearChoices();
}
}
}
что нас линии 65? – Raghunandan
это 'if (checked.get (i) == true)' –
как вы заполняете список. я думаю, его пустой – Raghunandan