Re: [問題] android studio 關於button問題

作者: givemepass (λ)   2017-06-05 14:19:06
※ 引述《CPU100 (小丑)》之銘言:
: 之前完全沒接觸過JAVA 更別提開發Android程式了
: 目前老闆突然丟一隻Android的程式過來,實在有看沒懂,希望版上前輩指導
: 以下是在看程式遇到的問題
: 在layout的XML裡,同樣是button ,有一個有使用onClick這個事件,一個沒有none
: 但兩個按鈕點擊都有功能的
同樣的事件可以有多種表示方法
以下這種是寫至在 xml (不推薦
: 1.這是有使用onClick
: public void btn_onClick (View view) {
: Intent intent = new Intent(this, Main3Activity.class);
: startActivity(intent);
: MainActivity.this.finish();
這樣代表著在程式內宣告了一個 btn_onClick 方法
並且你可以在 xml 內看到以下的寫法
<Button
android:onClick="btn_onClick"
android:text="push me"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
以下這種是寫在程式內(較常見
: 2.這是沒有使用onClick
: registered.setOnClickListener(new View.OnClickListener() {
: @Override
: public void onClick(View v) {
: Intent intent = new Intent(Main2Activity.this,
: registeredpage.class);
: startActivity(intent);
: Main2Activity.this.finish();
第二種寫法代表著他是用匿名類別的物件來實作的
可以參考良葛格的文章
https://openhome.cc/Gossip/Java/AnonymousInnerClass.html
也可以參考我之前寫過的一篇文章的解釋
https://www.ptt.cc/bbs/AndroidDev/M.1326163107.A.BDA.html
: 請問這兩種方式,什麼情況下使用呢?
: 如果我想把第一個有使用onClick的按鈕改用第二種寫法,該怎麼改呢?
: 謝謝!!
如果要改成第二種寫法
首先要在 xml 內將該 Button 設定一個 id
並且在主程式內透過
Button btn = (Button) findViewById(R.id.your_id);
btn.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
// do something
}
});
這樣就可以完成一個事件的宣告了
比較不推薦第一種的寫法
因為在 code review 的時候不好追蹤
大部分的情況之下是會採取第二種的寫法
除了可以共用 Listener 以外
可讀性也比較高
對於 Button 的運作也可以參考一下拙作
http://givemepass.blogspot.tw/2016/11/button.html
雖然你是臨時被老闆叫去寫 Java
如果未來還是要開發 Android 建議是從 Java 的基礎觀念學起
作者: Liulian (流連)   2017-06-05 14:25:00
推認真回文XD
作者: sofasoso (BANG!BANG!BANG!)   2017-06-05 14:44:00
推givemepass大大
作者: ssccg (23)   2017-06-05 16:43:00
兩種寫法都可以共用listener吧
作者: gcobc12632 (Ted)   2017-06-05 18:46:00
問一下關於第一種跟第二種寫法對於效能有影響嗎?
作者: ssccg (23)   2017-06-05 20:36:00
第一種是用reflection呼叫實際方法,理論上比較慢不過一個UI事件只用一次,差距是在nanosecond等級的,其實沒什麼影響
作者: sean0430 (NANA)   2017-06-07 21:53:00
還有一種是用class實作listener的寫法XD

Links booklink

Contact Us: admin [ a t ] ucptt.com