2012-08-14 98 views
0

我寫了一個應該顯示按鈕的簡單應用程序,單擊該按鈕時會顯示文本:'Hello World' - 但是,正在做的事情正在崩潰。當我點擊按鈕後嘗試顯示HelloWorld時,Android應用程序崩潰

的XML是:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <TextView 
     android:id="@+id/hello" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:text="" 
     tools:context=".GraphicsActivity" /> 

    <Button xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/button_send" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Write Something..." 
     android:onClick="writeMsg" /> 
</RelativeLayout> 

Android的源是在這裏:

public class GraphicsActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_graphics); 
    } 

    public void WriteMsg() { 

     Button button = (Button) findViewById(R.id.button_send); 
     button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       TextView tv = (TextView) findViewById(R.id.hello); 
       tv.setText("Hello World"); 
       setContentView(tv); 
      } 
     }); 
    } 
} 

正如我說的,它是所有崩潰。順便說一下,我在模擬器中運行它。

+1

哪來的例外呢? – 2012-08-14 10:28:59

回答

0
public class GraphicsActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_graphics); 
     Button button = (Button) findViewById(R.id.button_send); 
     WriteMsg(); 
    } 

    public void WriteMsg() { 
     button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       TextView tv = (TextView) findViewById(R.id.hello); 
       tv.setText("Hello World"); 
       setContentView(tv); 
      } 
     }); 
    } 
} 
0

試試這個

TextView tv = (TextView) findViewById(R.id.hello); 

寫在你的onCreate() method.And使用Toast在`onClickListener()」按鈕。

Toast.makeText(getApplicationContext(), "Discard", 10000).show(); 

這將幫助你

0
TextView tv = (TextView) findViewById(R.id.hello); 

試圖找到按鈕的文本視圖,而不是在整個佈局(如方法屬於按鈕)。 你應該這樣做:

public void WriteMsg() { 

    Button button = (Button) findViewById(R.id.button_send); 
    final TextView tv = (TextView) findViewById(R.id.hello); 
    button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 

      tv.setText("Hello World"); 

     } 
    }); 

    } 
0

唯一的例外是在

安卓的onClick = 「writeMsg」

,但你的活動有一個的onclick功能WriteMsg。將其更改爲小寫writeMsg。 你最有可能越來越沒有找到方法例外

1

試試這個

public class GraphicsActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_graphics); 
     Button button = (Button) findViewById(R.id.button_send); 
     button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       TextView tv = (TextView) findViewById(R.id.hello); 
       tv.setText("Hello World"); 
      } 
     }); 
    } 
} 
2

有你的代碼的幾個問題。
a)首先,如果您決定將單擊事件附加到XML代碼的按鈕上,則調用的方法應該帶有View參數。

簽名應該是這樣的:

public void WriteMsg(View view) { 
} 

b)其次,該法的名稱應符合什麼樣的onClick屬性的值。
其實你有這樣的XML:

android:onClick="writeMsg" 

,這是方法的declation:

public void WriteMsg() 

通知的第一個字母大寫。

c)最後一個,沒有必要在WriteMsg()方法中設置點擊監聽器到button_send。您已通過聲明onClick屬性附加了單擊事件偵聽器。這可能會導致其他問題。

因此,您要麼刪除onClick屬性,要麼刪除在WriteMsg方法中爲button_send設置偵聽器的代碼。

0
public class MainActivity extends Activity { 

public TextView tv; 
public Button btn_click; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    btn_click = (Button) findViewById(R.id.button1); 
    tv = (TextView) findViewById(R.id.textView1); 

    btn_click.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      writeText("Text to display"); 
     } 
    }); 

} 

private void writeText(String string) { 
    tv.setText(string); 
} 

}

相關問題