2013-03-31 342 views
3

我在Android應用程序中有多個按鈕。我想知道,在Java代碼中,哪個按鈕被點擊。據我所知,這是用這樣的一種方法完成的:如何判斷哪個按鈕被點擊onClick()

public void onClick(View view) { 
    // Do something 
} 

而在該方法中,你必須找出哪個按鈕被點擊。那是對的嗎?

如果是這樣,我該如何分辨哪些被點擊?我有findViewById()返回的各種Button對象。我只是不知道如何使用它們來分辨哪個按鈕被點擊。

+1

使用'this'? – enapupe

回答

12

在您的活動類中實現View的OnClickListner。重寫點擊方法。

Button b1= (Button) findViewById(R.id.button1); 
//find your button id defined in your xml. 


b1.setOnClickListener(this); 
// You have button OnClickListener implemented in your activity class. 
//this refers to your activity context. 

我已經使用了吐司消息。

http://developer.android.com/guide/topics/ui/notifiers/toasts.html

Toast.makeText(MainActivity.this,"button1", 1000).show(); 
//display a toast using activity context ,text and duration 

使用開關的情況下可以檢查被點擊了哪個按鈕。

在您的onClick方法中。

switch(v.getId()) //get the id of the view clicked. (in this case button) 
{ 
case R.id.button1 : // if its button1 
    //do something 
    break; 
} 

下面是完整的代碼。

public class MainActivity extends Activity implements OnClickListener { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Button b1= (Button) findViewById(R.id.button1); 
    Button b2= (Button) findViewById(R.id.button2); 
    Button b3= (Button) findViewById(R.id.button3); 
    b1.setOnClickListener(this); 
    b2.setOnClickListener(this); 
    b3.setOnClickListener(this); 

} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch(v.getId()) 
    { 
    case R.id.button1 : 
     Toast.makeText(MainActivity.this,"button1", 1000).show(); 
     break; 
    case R.id.button2 : 
     Toast.makeText(MainActivity.this,"button2", 1000).show(); 
     break; 
    case R.id.button3 : 
     Toast.makeText(MainActivity.this,"button3", 1000).show(); 
     break; 


    } 

} 
} 
4

如果是這樣,我該如何判斷哪個被點擊?

老朋友開關將幫助你實現你的目標:

public void onClick(View view) { 
    switch (view.getId()) { 
     case R.id.btn1: 
     // do your stuff for btn1 
     break; 
     case R.id.btn2: 
     // do your stuff for btn2 
     break; 
     ... 
    } 
} 

說明:每個部件有ID所以你可以簡單地處理通過其開關ID上面寫的是點擊的按鈕。

view.getId()返回小部件的ID

+0

是的,它的工作原理。謝謝! –

+0

@JB_User歡迎 – Sajmon

4

有不同的處理方法。與你目前有,你可以使用

public void onClick(View view) { 
    // Do something 
    view.getId(); 
} 

將在android:idxml返回值。您可以使用switch語句來比較這些值以決定要執行的操作並切換到id。您也可以在每個buttonxml中分配onClick()

<Button 
    ... 
    android:onClick="functionName"/> 

然後在Java代碼中,你可以有

public void functionName(View view) { 
     // Do something 
    } 

而且view這裏點擊將在button您在xml

3

分配這個onClick給你也可以對每個按鈕使用匿名內部類:

Button b1= (Button) findViewById(R.id.button1); 
Button b2= (Button) findViewById(R.id.button2); 

b1.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // button 1 was clicked! 
    } 
}); 
b2.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // button 2 was clicked! 
    } 
}); 
1

您可以使用庫(http://jakewharton.github.io/butterknife/):

//Fragment 
@InjectView(R.id.dialog_userinput) 
public EditText userinput; 

@InjectView(R.id.dialog_passinput) 
public EditText passinput; 

@OnClick(R.id.dialog_login) 
public void login(View view) { 
    //do stuff 
    this.dismiss(); 
} 

@OnClick(R.id.dialog_cancel) 
public void cancel(View view) { 
    //do stuff 
    this.dismiss(); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.dialog_layout, container); 
    ButterKnife.inject(this, view); 
    return view; 
} 
+0

'@InjectView'在v7中被重命名爲'@ Bind',並在v8中被命名爲'@ BindView' – EpicPandaForce

0
implements 

    public class ProgramsFiles extends AppCompatActivity implements View.OnClickListener { 

     public void onClick(View view) { 
      switch (view.getId()) { 
       case R.id.btnA: 
       //ExampleA 
        break; 
       case R.id.btnB: 
       //ExampleB 
       break;  
    } 
} 
} 
相關問題