2012-02-21 15 views
0

基本的には、複数選択可能なListActivity内で選択された項目を取得しようとしています。私はこれが明らかにされることを愛する多くの初心者のAndroidプログラマーがいると確信しています。このアプリケーションは、FORループに到達し、複数選択項目の値をArrayListの 'items'に割り当てるまでうまく動作します。私はトーストを使って複数選択肢の項目がArraylistの項目に割り当てられているかどうかを確認しようとしています。ボタンをクリックするとアプリがクラッシュします。テストはアンドロイド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リストはnullであり、初期化する前に使用しようとしています。

どこかで使用する前にitems = new ArrayList<String>();を使用する必要があります。そうしないと、NullPointerExceptionsが引き続き発生します。

+0

ありがとうございましたSleepybear ...今すぐ機能します! ArrayList項目をnullでないとして定義し、空の 'new ArrayList ()'という値を代入するだけです。再度、感謝します! – Robogenus

関連する問題