2013-05-22 54 views
1

我最近開始觀看有關android開發的youtube視頻。我看了幾個,試圖寫我自己的應用程序。基本上,它所做的是,用戶在文本字段中輸入文本,當用戶按下單擊按鈕時,輸入的值將顯示在文本視圖上。簡單的Android應用程序打印文本

我非常困惑,我應該在哪裏定義變量以及如何檢索值以及如何在特定項目上顯示值。我想知道這個東西,所以我可以正確開始開發android應用程序。這是我目前擁有的代碼:

package com.abihnav.numdisplayer; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.widget.EditText; 
import android.widget.TextView; 

public class MainActivity extends Activity { 

public String YOUR_NUM = "YOUR_NUM"; 

EditText numEditText; 
TextView textView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    EditText numEditText = (EditText) findViewById(R.id.numEditText); 
    TextView textView = (TextView) findViewById(R.id.textView1); 
} 

public void printNum(){ 
    YOUR_NUM = numEditText.getText().toString(); 
    textView.setText(YOUR_NUM); 


} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

} 

每當我輸入文本或數字時,應用程序強制關閉。幫幫我?!

+2

我看不到按鈕? – njzk2

+1

試試這個textView.setText(String.valueOf(YOUR_NUM)); – Raghunandan

+0

按鈕在哪裏? @Raghunandan'YOUR_NUM'已經是一個String變量,爲什麼要調用'String.valueOf()'呢? –

回答

1

通過執行以下操作:

EditText numEditText; 
TextView textView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    EditText numEditText = (EditText) findViewById(R.id.numEditText); 
    TextView textView = (TextView) findViewById(R.id.textView1); 
} 

你正在創建相同的變量的兩個實例。壞!爲了在其他的方法來使用這些值,則應該從onCreate內取出EditTextTextView,像這樣:

EditText numEditText; 
TextView textView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    numEditText = (EditText) findViewById(R.id.numEditText); 
    textView = (TextView) findViewById(R.id.textView1); 
} 

現在,你仍然需要定義按鈕和onClick方法來完成這一點。像這樣:

EditText numEditText; 
TextView textView; 
Button myButton; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    numEditText = (EditText) findViewById(R.id.numEditText); 
    textView = (TextView) findViewById(R.id.textView1); 
    myButton = (Button) findViewById(R.id.button_id); 
    myButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      printNum(); 
     } 
    }); 

} 

此外,請確保您在擁有@+id/button_id的代碼工作的id屬性的XML文件中有一個<Button>。 (感謝ZouZou)

+1

你應該添加在XML文件中創建'button' –

+0

謝謝你們這麼多!我完全忘了實例化一個按鈕。而且我的愚蠢是不加入onClick函數。非常感謝! 另外,聲明變量在哪裏更好?在onCreate函數之外還是在它之內?我知道我宣佈了兩次,但哪裏是聲明變量的最佳位置? –

+0

@AbhinavBhatta我會說,他們都在'onCreate'方面,正如我已經表明的那樣,這允許你從其他方法(如'getText()')訪問它們,就像你用printNum()方法完成的那樣。 – TronicZomB

1

像@TronicZomB你也可以嘗試這種方式

EditText numEditText; 
TextView textView; 
Button myButton; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    numEditText = (EditText) findViewById(R.id.numEditText); 
    textView = (TextView) findViewById(R.id.textView1); 
    myButton = (Button) findViewById(R.id.button_id); 

} 
public void printNum(View v) { 
YOUR_NUM = numEditText.getText().toString(); 
textView.setText(YOUR_NUM); 

}

,並在XML部分

<Button 
android:[email protected]/button_id 
android:text="ok" 

android:onClick="printNum" 

android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
/> 

這樣通過把在揭掉XML直接它會調用名爲printNum的方法並執行它。

相關問題