2012-02-21 51 views
0

我基本上試圖獲取啓用了多選項的ListActivity中的哪些項目。我確信有很多開始的Android程序員會喜歡這個被澄清的。這個應用程序運行良好,直到它到達FOR循環,並嘗試將多選項的值分配給ArrayList'項目'。我只是試着用吐司來看看多選項是否被分配給Arraylist的'項目'。該按鈕被點擊時,該應用程序崩潰。測試採用的是Android 2.2模擬器如何從Android中的ListActivity獲取多個選定的項目

這裏做的是我的main.xml佈局

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello" /> 

<Button android:id="@+id/button" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Selected Items" />  

<ListView android:id="@android:id/list" android:layout_width="fill_parent" 
    android:layout_height="wrap_content" android:choiceMode="multipleChoice" 
    android:textFilterEnabled="true" android:fastScrollEnabled="true" >  
</ListView> 

</LinearLayout> 

這裏是代碼

package com.tests.TestCode; 

import android.app.ListActivity; 
import android.os.Bundle; 
import java.util.ArrayList; 
import android.util.SparseBooleanArray; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.Toast; 

public class MainActivity extends ListActivity { 

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

    final String[] list = {"wrenches","hammers","drills","screwdrivers","saws","chisels","fasteners"}; 

    // Initializing An ArrayAdapter Object for the ListActivity 
    final ArrayAdapter<String> adapter = new ArrayAdapter<String> (this, android.R.layout.simple_list_item_multiple_choice, list); 
    setListAdapter(adapter); 

    Button button = (Button) findViewById(R.id.button); 
    button.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 

      ListView thelistview = (ListView) findViewById(android.R.id.list); 
      ArrayList<String> items = null; 

      SparseBooleanArray checkedItems = thelistview.getCheckedItemPositions(); 

      if (checkedItems != null) { 

       for (int i=0; i<checkedItems.size(); i++) { 
        if (checkedItems.valueAt(i)) { 
         String item = adapter.getItem(checkedItems.keyAt(i)).toString(); 
         items.add(item); 
        } 
       } 
       Toast.makeText(getBaseContext(), items.toString(), Toast.LENGTH_LONG).show(); 

      } else { 
       Toast.makeText(getBaseContext(), "checkedItems == null", Toast.LENGTH_LONG).show(); 
      } 
     } 

    });   
} 
} 

非常感謝任何人都可以提供一個很好的答案來的完成此ListActivity方案的最佳方式,或任何能夠解釋爲什麼應用程序在分配給ArrayList時崩潰的人。謝謝!

回答

1

您的items列表爲空,您嘗試在初始化之前使用它。

在嘗試使用它之前,您需要在某處使用items = new ArrayList<String>();,否則您將繼續獲取NullPointerExceptions。

+0

感謝Sleepybear ...它現在的作品!只需將ArrayList項目定義爲非空值併爲其分配一個空白的'new ArrayList ()'值。再次感謝! – Robogenus 2012-02-22 03:17:19

相關問題