2012-02-21 90 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

相关问题