2013-01-06 61 views
0

我是Android開發新手,我試圖從本書中使用Eclipse/DDMS和Eclipse複製和粘貼本示例。問題是,aapt工具似乎沒有正確生成R.java。 R.java在它的ID類中沒有myListView和myEditText。Android aapt工具沒有正確生成R.Java

main.xml中:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <EditText 
    android:id="@+id/myEditText" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:hint="@string/addItemHint" 
    android:contentDescription="@string/addItemContentDescription" 
    /> 
    <ListView 
    android:id="@+id/myListView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    /> 
</LinearLayout> 

的strings.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="app_name">ToDoList</string> 
    <string name="addItemHint">New To Do Item</string> 
    <string name="addItemContentDescription">New To Do z</string> 
</resources> 

R.java:

/* AUTO-GENERATED FILE. DO NOT MODIFY. 
* 
* This class was automatically generated by the 
* aapt tool from the resource data it found. It 
* should not be modified by hand. 
*/ 

package com.example.todolist; 

    public final class R { 
     public static final class attr { 
     } 
     public static final class drawable { 
      public static final int ic_launcher=0x7f020000; 
     } 
     public static final class id { 
      public static final int menu_settings=0x7f070000; 


     } 
     public static final class layout { 
      public static final int main=0x7f030000; 
     } 
     public static final class menu { 
      public static final int main=0x7f060000; 
     } 
     public static final class string { 
      public static final int app_name=0x7f040000; 
      public static final int hello_world=0x7f040001; 
      public static final int menu_settings=0x7f040002; 
     } 
     public static final class style { 
      /** 
      Base application theme, dependent on API level. This theme is replaced 
      by AppBaseTheme from res/values-vXX/styles.xml on newer devices. 


       Theme customizations available in newer API levels can go in 
       res/values-vXX/styles.xml, while customizations related to 
       backward-compatibility can go here. 


      Base application theme for API 11+. This theme completely replaces 
      AppBaseTheme from res/values/styles.xml on API 11+ devices. 

    API 11 theme customizations can go here. 

      Base application theme for API 14+. This theme completely replaces 
      AppBaseTheme from BOTH res/values/styles.xml and 
      res/values-v11/styles.xml on API 14+ devices. 

    API 14 theme customizations can go here. 
      */ 
      public static final int AppBaseTheme=0x7f050000; 
      /** Application theme. 
    All customizations that are NOT specific to a particular API-level can go here. 
      */ 
      public static final int AppTheme=0x7f050001; 
     } 
    } 

Main.java:

package com.example.todolist; 

import java.util.ArrayList; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.EditText; 
import android.widget.ListView; 

public class Main extends Activity { 

    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Inflate your View 
    setContentView(R.layout.main); 

    // Get references to UI widgets 
    ListView myListView = (ListView)findViewById(R.id.myListView); 
    final EditText myEditText = (EditText)findViewById(R.id.myEditText); 

    // Create the Array List of to do items 
    final ArrayList<String> todoItems = new ArrayList<String>(); 

    // Create the Array Adapter to bind the array to the List View 
    final ArrayAdapter<String> aa; 

    aa = new ArrayAdapter<String>(this, 
            android.R.layout.simple_list_item_1, 
            todoItems); 

    // Bind the Array Adapter to the List View 
    myListView.setAdapter(aa); 

    myEditText.setOnKeyListener(new View.OnKeyListener() { 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if (event.getAction() == KeyEvent.ACTION_DOWN) 
      if ((keyCode == KeyEvent.KEYCODE_DPAD_CENTER) || 
       (keyCode == KeyEvent.KEYCODE_ENTER)) { 
      todoItems.add(0, myEditText.getText().toString()); 
      aa.notifyDataSetChanged(); 
      myEditText.setText(""); 
      return true; 
      } 
     return false; 
     } 
    }); 

    } 
+0

檢查R.java上的時間戳。您可能正在查看一個版本,該版本在您提到的兩個項目的添加之前。它可能沒有被重建。如果您的項目中有任何其他佈局錯誤,R.java不會重新生成。 – EJK

+0

Eclipse,ADT和所有Android軟件包都是最新版本(昨晚只更新了它們)。我將這些代碼剪切並粘貼到一個新項目中。所以,R.java應該實時重新生成 - 對嗎?我沒有看到我從本書中剪切和粘貼的佈局錯誤。不知道該從哪裏出發。 – dman

+0

確保項目已經建成。執行以下操作:從「項目」菜單中,選擇「清潔...」。這應該引發完整的構建。 – EJK

回答

0

@dman ...使用我的下面的代碼&文件,它運行得很好。添加下面的圖片顯示的成功執行:) enter image description here

  1. 的strings.xml文件似乎是完美的罰款。那裏沒有問題
  2. MainActivity.java文件

    package com.example.test1;

    import java.util.ArrayList; import android.os.Bundle; import android.app.Activity; import android.view.KeyEvent; import android.view.View; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ListView;

    公共類MainActivity擴展活動{

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
    
        // Get references to UI widgets 
        ListView myListView = (ListView)findViewById(R.id.myListView); 
        final EditText myEditText = (EditText)findViewById(R.id.myEditText); 
    
        // Create the Array List of to do items 
        final ArrayList<String> todoItems = new ArrayList<String>(); 
    
        // Create the Array Adapter to bind the array to the List View 
        final ArrayAdapter<String> aa; 
    
        aa = new ArrayAdapter<String>(this, 
                android.R.layout.simple_list_item_1, 
                todoItems); 
    
        // Bind the Array Adapter to the List View 
        myListView.setAdapter(aa); 
    
        myEditText.setOnKeyListener(new View.OnKeyListener() { 
         public boolean onKey(View v, int keyCode, KeyEvent event) { 
         if (event.getAction() == KeyEvent.ACTION_DOWN) 
          if ((keyCode == KeyEvent.KEYCODE_DPAD_CENTER) || 
           (keyCode == KeyEvent.KEYCODE_ENTER)) { 
          todoItems.add(0, myEditText.getText().toString()); 
          aa.notifyDataSetChanged(); 
          myEditText.setText(""); 
          return true; 
          } 
         return false; 
         } 
    
        }); 
    
        } 
    

    }

  3. RES /佈局/ activity_main.xml中

  4. 確保你沒有在路徑上的任何文件:res/menu/... xml。默認情況下,系統在該文件夾中包含'main.xml'文件。如果存在,刪除那些東西,因爲我們不需要它。