1

私は基本的に、複数選択が有効になっているListActivity内でどのアイテムが選択されているかを取得しようとしています。これを明らかにしたいと思っている初心者のAndroidプログラマーはたくさんいると思います。このアプリは、FORループに到達し、複数選択アイテムの値をArrayList'items'に割り当てようとするまで正常に実行されます。Toastを使用して、複数選択アイテムがArraylistの「items」に割り当てられているかどうかを確認しようとしています。ボタンがクリックされるとアプリがクラッシュします。テストはAndroid2.2エミュレーターで行われます

これが私の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への割り当ての時点でアプリがクラッシュする理由を説明できる人には多くの義務があります。ありがとう!

4

1 に答える 1

1

itemsリストがnullであり、初期化する前に使用しようとします。

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

于 2012-02-22T01:45:28.293 に答える