2010-09-15 30 views
3

我遇到了Android HelloViews微調教程的問題。 HelloSpinner.java中的錯誤指出「R.id無法解析」和「R.array無法解析」。 AndroidManifest.xml中的錯誤表明沒有找到與給定名稱匹配的資源(在'label'處的值爲'@ string/app_name')「和」找不到與給定名稱匹配的資源(在'label'處值'@ string/app_name')「。Android HelloViews微調教程R.id和R.array無法解析

這裏是我的完整代碼:

HelloSpinner.java

package net.brianwolf.hellospinner; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Spinner; 
import android.widget.Toast; 
import android.widget.AdapterView.OnItemSelectedListener; 

public class HelloSpinner extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     //Spinner spinner = (Spinner) findViewById(R.id.spinner); 
     android.widget.Spinner spinner = (android.widget.Spinner) findViewById(R.id.spinner); 
     ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
       this, R.array.planets_array, android.R.layout.simple_spinner_item); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner.setAdapter(adapter); 


     spinner.setOnItemSelectedListener(new MyOnItemSelectedListener()); 
    } 
    public class MyOnItemSelectedListener implements OnItemSelectedListener { 

     public void onItemSelected(AdapterView<?> parent, 
      View view, int pos, long id) { 
      Toast.makeText(parent.getContext(), "The planet is " + 
       parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show(); 
     } 

     public void onNothingSelected(AdapterView parent) { 
      // Do nothing. 
     } 
    } 
} 

RES /佈局/ main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:padding="10dip" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="10dip" 
     android:text="@string/planet_prompt" 
    /> 
    <Spinner 
     android:id="@+id/spinner" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:prompt="@string/planet_prompt" 
    /> 
</LinearLayout> 

RES/layoutvalues/strings.xml中

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="planet_prompt">Choose a planet</string> 
    <string-array name="planets_array"> 
     <item>Mercury</item> 
     <item>Venus</item> 
     <item>Earth</item> 
     <item>Mars</item> 
     <item>Jupiter</item> 
     <item>Saturn</item> 
     <item>Uranus</item> 
     <item>Neptune</item> 
    </string-array> 
</resources> 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="net.brianwolf.hellospinner" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".HelloSpinner" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

    </application> 


</manifest> 

謝謝!

回答

3

添加到您strings.xml(或values.xml,無論它叫):

<string name="app_name">The Name Of Your App Goes Here</string>

+0

這個技巧。謝謝! – bgw 2010-09-17 15:44:08

4

假設你使用Eclipse,你有沒有嘗試清理項目?項目>清潔...

+0

我知道這是一個古老的答案,但我是新來的Android編程(和Java),這救了我從我敲頭靠在牆上,試圖找出爲什麼R.array不像廣告一樣工作。謝謝。 +1 – Tim 2011-10-30 06:40:25

1

添加

<string name="app_name">The Name Of Your App Goes Here</string> 

不會幫助這裏,還是有問題「 R「不能從」setContentView(R.layout.main)「解析爲變量;」在hellospinner.java

我點擊錯誤符號,它告訴我將所有「R」鏈接到net.brianwolf.hellospinner.R;現在它的工作原理

1

我在這個教程中遇到了同樣的問題。 MatrixFrog最初提出的建議對我而言最初也不適用,但它讓我走上了正確的道路,經過進一步的研究後,我發現問題(在本教程的上下文中)出現在AndroidManifest.xml文件中。下面是它應該是什麼樣子:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.example.hellospinner" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="12" /> 

    <application android:icon="@drawable/icon" android:label="@string/planet_prompt"> 
     <activity android:name=".HelloSpinnerActivity" 
        android:label="@string/planet_prompt"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

    </application> 
</manifest> 

注意到的唯一變化是它最初引用app_name的兩個地方,他們現在引用planet_prompt相匹配的教程代碼。這似乎是教程錯過的一個小細節,對於經驗豐富的android開發人員來說可能是一個明顯的解決方案,但是對於初學者來說真的很令人沮喪......畢竟這是一個教程。