1

ボタンを持つアクティビティがあります。Button をクリックすると、TextView と Spinner を含む単純なポップアップ ウィンドウが開くはずです。ポップアップウィンドウが正常に開きました。私の問題は、Spinner への参照を取得すると、Resources$NotFoundException が返され、リソース ID が無効であると言われることです。

私は現在 popupView.findViewById(R.layout.popup_create_workout) を呼び出して、スピナーへの参照を取得しようとしています。また、ポップアップ ウィンドウが使用する親 XML レイアウトへの参照を取得して、それに対して finViewById を呼び出してみました (例: exampleView.findViewById(R.layout.example_popup_view))。 (これはうまくいくとは思っていませんでした。しかし、これらの手法は両方とも、ビュー ID で、またはスピナーで setAdapter() を呼び出したときに、NullPointerExceptions をスローします。Eclipse でプロジェクトをクリーンアップしようとしました。正しい参照 ID、コンテキストなどを使用しています。

本当にループに陥っているのは、同じ XML レイアウトから TextView への参照を取得して操作できることです。このサイト全体を検索して、似たような質問を見つけましたが、どれも私が必要としていたものではありませんでした。また、思いついたものはすべてグーグル検索しましたが、運が悪かったです。

だから、私の質問は: スピナーへの参照を取得しようとすると、Resources$NotFoundException が発生するのはなぜですか? おそらく簡単なことだとはわかっていますが、理解できないようです。よろしくお願いします。

スピナーに関係するアクティビティの一部を次に示します。

@Override
public void onClick(View v) {
    LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE);
    View popupView = inflater.inflate(R.layout.popup_add_goal, null);
    PopupWindow popupWindow = new PopupWindow(popupView);
    popupWindow.setWidth(240);
    popupWindow.setHeight(447);
    popupWindow.update();
    popupWindow.showAtLocation(v, Gravity.CENTER, 0, 0);

    ArrayList<String> list = new ArrayList<String>();
    list.add("Item 1");
    list.add("Item 2");
    list.add("Item 3");

    Spinner spinner = (Spinner) popupView.findViewById(R.id.goal_spinner);
    ArrayAdapter<ArrayList<String>> arrayAdapter = new ArrayAdapter<ArrayList<String>>(WorkoutActivity.context, R.id.list_content_white);
    arrayAdapter.add(list);
    spinner.setAdapter(arrayAdapter);
}

});

XML レイアウト:

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

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:text="Add goals"
    android:textColor="#ffffff"
    android:textSize="48sp" />

<LinearLayout android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:text="Search for a goal"
        android:textColor="#ffffff"
        android:textSize="40sp"
        android:gravity="center" />

    <Spinner android:id="@+id/goal_spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#ffffff" />

</LinearLayout>

そして最後に、スタック トレース:

12-29 03:51:14.832: E/AndroidRuntime(5216): FATAL EXCEPTION: main
12-29 03:51:14.832: E/AndroidRuntime(5216): android.content.res.Resources$NotFoundException: Resource ID #0x7f09001a type #0x12 is not valid
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.content.res.Resources.loadXmlResourceParser(Resources.java:2144)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.content.res.Resources.getLayout(Resources.java:853)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.view.LayoutInflater.inflate(LayoutInflater.java:394)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:371)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:193)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.widget.Spinner.onMeasure(Spinner.java:439)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.view.View.measure(View.java:15513)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4827)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.view.View.measure(View.java:15513)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4827)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.view.View.measure(View.java:15513)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1874)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1089)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1265)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.view.Choreographer.doCallbacks(Choreographer.java:562)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.view.Choreographer.doFrame(Choreographer.java:532)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.os.Handler.handleCallback(Handler.java:725)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.os.Handler.dispatchMessage(Handler.java:92)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.os.Looper.loop(Looper.java:137)
12-29 03:51:14.832: E/AndroidRuntime(5216): at android.app.ActivityThread.main(ActivityThread.java:5039)
12-29 03:51:14.832: E/AndroidRuntime(5216): at java.lang.reflect.Method.invokeNative(Native Method)
12-29 03:51:14.832: E/AndroidRuntime(5216): at java.lang.reflect.Method.invoke(Method.java:511)
12-29 03:51:14.832: E/AndroidRuntime(5216): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
12-29 03:51:14.832: E/AndroidRuntime(5216): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
12-29 03:51:14.832: E/AndroidRuntime(5216): at dalvik.system.NativeStart.main(Native Method)

list_content_white を含むレイアウトは次のとおりです。

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

<TextView
android:id="@+id/list_content_white"
android:textColor="#ffffff"
android:textSize="30sp"
android:textStyle="bold"
android:layout_margin="8dp"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />

</LinearLayout>
4

2 に答える 2

3

何が例外を引き起こしているのかはわかりませんが、これである可能性があります。変化する:

ArrayAdapter<ArrayList<String>> arrayAdapter = new ArrayAdapter<ArrayList<String>>(WorkoutActivity.context, R.id.list_content_white);
arrayAdapter.add(list);

に:

ArrayAdapter<String> arrayAdapter = 
    new ArrayAdapter<String>(WorkoutActivity.this, R.id.list_content_white, list);
//                        This is wrong, see below  ^^^^

ArrayAdapter は既に ArrayList を想定しているため、単に ArrayList のサブタイプを指定する必要があります。


根本的な問題
レイアウト ファイルにビューの ID と同じ名前を付けることには、少し危険があります... あなたはそれを発見しました。ArrayAdapter の初期化中にR.layout.list_content_white not を使用します。R.id.list_content_white

于 2012-12-29T00:38:51.463 に答える
0

これを onCreate() に 2 行で記述します。

LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE);
View popupView = inflater.inflate(R.layout.popup_add_goal, null);
于 2012-12-29T04:44:25.133 に答える