2017-08-25 55 views
-1

我對「活動」按鈕操作中setOnClickListener的不同用法感到困惑。 我發現了各種解決方案,但我確定有一些最好/更差的方法來實現它,也有一些「因爲」。按鈕的最佳做法setOnClickListeners

我理解(作爲主題)哪個是最好的方法,哪個(以及爲什麼)不是。

  1. 呼叫活動(類)的私有功能,並設置監聽器和所有蒙上它:

    public class MainActivity extends AppCompatActivity { 
        Private Button myButton; 
        @Override 
        protected void onCreate(Bundle savedInstanceState) { 
         super.onCreate(savedInstanceState); 
         setContentView(R.layout.activity_main); 
         OnClickButton(); 
        } 
        private void OnClickButton(){ 
         myButton = (Button)findViewById(R.id.Button1); 
         myButton.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
          // button actions 
         } 
    
         }); 
        } 
    } 
    
  2. 設置在活動setOnClickListener,然後調用相應的功能: (在這種情況下,我不也明白爲什麼視圖定義爲的onClick 最終

    public class MainActivity extends AppCompatActivity { 
        Private Button myButton; 
        @Override 
        protected void onCreate(Bundle savedInstanceState) { 
         super.onCreate(savedInstanceState); 
         setContentView(R.layout.activity_main); 
         myButton.setOnClickListener(onClickListener); 
        } 
        private OnClickListener onClickListener = new OnClickListener() { 
         @Override 
         public void onClick(final View v) { 
         // button actions 
         } 
        } 
    
  3. 只是一個

ON MAINACTIVITY.XML ADD:

android:onClick="onButtonClick" 

ON MAINACTIVITYCLASS:

public class MainActivity extends AppCompatActivity { 
     Private Button myButton; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
     } 
     public void onButtonClick(View v){ 
      // button actions 
     } 
    } 

注意:通過鏈接在XML文件中的函數參數MyView的SA功能,我發現(需要的證明了) 3度方式不是一種好的做法,因爲在框架集中不受支持。

如果你有更強的好的編碼解決方案,請添加它。

請嘗試清除良好做法和不良做法差異,以及爲什麼某些事情更爲正確,或者是一個不好的解決方案。

希望這可能對其他人有用, 我寫了這篇文章也因爲我閱讀的很多帖子都很舊。 謝謝。

+1

https://stackoverflow.com/questions/30082892/best-way-to-implement-view-onclicklistener-in-android –

+0

訪問這裏已經answerd。 https://stackoverflow.com/questions/30082892/best-way-to-implement-view-onclicklistener-in-android –

+0

我讀過這篇文章,並試圖創建:public class ActivityMain extends Activity實現View.OnClickListener .. 。 。但我有錯誤:「類」MainActivity「必須被聲明爲抽象或在'OnClickListener'中實現抽象方法'onClick(view)' – Marco

回答

0

我推薦使用Butterknife庫進行綁定和OnClick方法。在我看來,它是最明確的方式來定義它。

Butterknife:http://jakewharton.github.io/butterknife/

實例:

@OnClick(R.id.submit) 
public void sayHi(Button button) { 
    button.setText("Hello!"); 
} 


@OnClick({ R.id.door1, R.id.door2, R.id.door3 }) 
public void pickDoor(DoorView door) { 
    if (door.hasPrizeBehind()) { 
     Toast.makeText(this, "You win!", LENGTH_SHORT).show(); 
    } else { 
     Toast.makeText(this, "Try again", LENGTH_SHORT).show(); 
    } 
} 
+1

坦克你的建議,我會看到這個解決方案,但我更願意瞭解基礎知識如果你的系統已經安裝了Android的工作室庫,那麼在執行新的工作之前,請先閱讀以下內容: – Marco

0

我更喜歡在XML佈局設置方法的onclick並限定開關塊來處理基於ID不同的事件。這種方法比使用一堆匿名內部類更可讀,性能更好。

public class MainActivity extends AppCompatActivity { 
Private Button myButton; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 
public void onButtonClick(View v) 
    { 
     int id = v.getId(); 
     switch(id) 
     { 
      case R.id.signinbutton: signin();break; 
      case R.id.logoutbutton: logout();break; 
     } 
    } 
} 
+0

我讀過使用xml方法不支持framsest,我需要framsets。 – Marco

+1

@Marco當加載html到android時,android會自動支持frameset 。 –