2013-03-31 17 views
2

我正在編寫我的第一個Android應用程序並遇到了一些麻煩。請看下面的代碼:Java在執行Android活動時找不到符號

@SuppressLint("NewApi") 
@Override 
protected void onCreate(Bundle savedInstanceState{ 
    super.onCreate(savedInstanceState); 
    TextView textView; 
    textView = new TextView(this); 
    textView.setTextSize(40); 
    //textView.setText("TEST"); 
    setContentView(textView); 
} 

此代碼編譯只要setText線一直評論。如果我取消註釋它,我得到以下錯誤:cannot find symbol: variable textView

我在做什麼明顯錯誤在這裏?我是新來的Android和,因爲我寫的任何Java它已經多年(我寫了很多C和我的直覺往往會帶壞我...)

編輯:

此功能的簡化示例代碼在這裏: http://developer.android.com/training/basics/firstapp/starting-activity.html

這個例子錯了嗎?它看起來不像我應該在清單中創建這樣一個簡單的視圖,這看起來像一個java鏈接器錯誤給我?我很感謝您的回覆,但我仍然無法理解錯誤。

+0

您使用的是Eclipse嗎?如果是這樣,請嘗試清理並重新編譯。你在做什麼看起來不錯。事實上,你可以設置文本大小,但不是文本是最奇怪的。順便說一句,+1取消愚蠢downvote。 – Simon

+0

這個例子永遠不會錯。這只是另一種做事的方式。請看我的答案的編輯部分。 – Swayam

+0

我正在用'ant clean debug'構建。這是非常奇怪的,我可以改變大小,但不是文字。 –

回答

1
  1. 的setContentView(電視),然後將文本設置爲textview。你可以做如下。

    public class MainActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    TextView tv= new TextView(this); 
    setContentView(tv); 
    tv.setText("hello"); 
    } 
    } 
    
  2. 在你的main.xml

    <TextView 
    android:id="@+id/textView1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello" /> 
    

在你的活動

TextView textView = (TextView)findViewById(R.id.textView1); 

我建議你把第二部分。您的xml用於定義與您在MainActivity.java文件中定義的邏輯分離的UI。您對UI所做的任何更改都需要不需要更改您的Java文件。在你的xml文件中,你可以設置文本視圖的大小。您無需更改.java文件中的邏輯。

您對.java文件所做的更改類似,不需要在xml中進行更改。

+0

+1對於你提供的解釋,爲什麼邏輯和UI應該保持分開。 – Swayam

2

少數地方,你要去哪裏錯了:

- 你想引用任何視圖

之前請setContentView() - setContentView()使用一個包含您的佈局

的XML文件的名稱 - 您需要使用JAva代碼在您的佈局中對TextView進行引用findViewById

@Override 
protected void onCreate(Bundle savedInstanceState{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.name_of_your_xml_file_which_has_the_layout); 
    TextView textView; 
    textView = (TextView)findViewById(R.id.id_of_the_textView_as_given_in_your_layout.xml); 
    textView.setTextSize(40); 
    textView.setText("TEST"); 
} 

編輯: 給出的代碼here動態創建一個TextView,我的答案包含的方法使用靜態佈局,只是引用了java代碼中的textView。這是做這件事的標準方式,因爲一旦事情變得複雜,實現動態佈局變得非常困難。現在,事情看起來很簡單,因爲只有一個TextView。但隨着更多的用戶界面元素,你只是在招惹更多的麻煩(在我看來)。我建議你遵循靜態佈局方法,特別是因爲你是從Android開始的。

+0

我的印象是,如果它非常簡單,我不需要佈局中定義的視圖... –

+0

那麼,你可以有一個空白的佈局,你仍然需要這樣做! – Swayam

+1

OP想要做的事情是完全合法的,並且不使用setContentView()不會導致編譯器錯誤。這裏還有其他的東西在這裏。 – Simon

1

你可以像你的佈局文件創建一個文本視圖:

<TextView 
     android:id="@+id/textView1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/hello" /> 

然後找到你的代碼中,然後將其分配給變量:

TextView textView = (TextView)findViewById(R.id.textView1); 
// Now you can do whatever you want with this textview 
+0

'FindViewById()'不正確,應該是'findViewById()'。 – NullPointer

+0

OP試圖做的事情是完全合法的,不使用setContentView()不會導致編譯器錯誤。這裏還有別的事情要做。 – Simon