1

我有一個具有Button的活動。當按鈕被點擊時,它應該打開一個簡單的彈出窗口,其中包含一個TextView和一個微調器。我有彈出窗口打開罰款。我的問題是,當我抓住Spinner的引用時,它給了我一個Resources $ NotFoundException,並且說資源ID無效。適用於微調器的資源NotFoundException Android

我目前正在調用popupView.findViewById(R.layout.popup_create_workout)來嘗試獲取對微調器的引用。我也嘗試過抓取一個對Popup窗口使用的父XML佈局的引用,並在其上調用finViewById(例如exampleView.findViewById(R.layout.example_popup_view)。我還嘗試了普通的ol'findViewById(R.layout.example_popup_view) (我不希望這樣做),但是,這兩種技術都會在View ID或者在Spinner上調用setAdapter()時拋出NullPointerExceptions。我已經嘗試在Eclipse中清理項目,再次檢查以確保我正在使用正確的參考ID,上下文等

什麼是真正引發我的循環是,我能夠從同一個XML佈局獲取對TextView的引用並對其進行處理。在這個網站上發現了一些類似的問題,但沒有一個是我需要的,我也用Google搜索了所有我能想到的但沒有運氣的東西。

所以,我的問題是:爲什麼當我嘗試獲取對微調器的引用時,我得到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> 
+0

什麼線做的_LogCat trace_點? –

+0

嗯,它實際上並沒有給我一個特定的路線(不是我看到的)。我把整個堆棧跟蹤起來,這樣你就可以繼續看看。 – Don

回答

2

我不確定是什麼導致了這個異常,但可能是這個。變化:

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而不是R.id.list_content_white

+0

你說得對。它沒有修復這個異常,但它使我的代碼更清潔一些。謝謝! – Don

+0

我更新了我的答案。你嘗試了'WorkoutActivity.this'而不是'WorkoutActivity.context'嗎? – Sam

+0

好的。我嘗試了WorkoutPlannerPopup.this(這是持有此活動的類的名稱)和gestBaseContext(),但都沒有解決問題...... – Don

0

把這個在的onCreate)兩線(

LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE); 
View popupView = inflater.inflate(R.layout.popup_add_goal, null); 
+0

這段代碼實際上已經在onCreateMethod中。我發佈的onClickMethod包含在Button.OnClickListener方法的onCreate方法中。 – Don

相關問題