我在Android應用程序中有多個按鈕。我想知道,在Java代碼中,哪個按鈕被點擊。據我所知,這是用這樣的一種方法完成的:如何判斷哪個按鈕被點擊onClick()
public void onClick(View view) {
// Do something
}
而在該方法中,你必須找出哪個按鈕被點擊。那是對的嗎?
如果是這樣,我該如何分辨哪些被點擊?我有findViewById()返回的各種Button對象。我只是不知道如何使用它們來分辨哪個按鈕被點擊。
我在Android應用程序中有多個按鈕。我想知道,在Java代碼中,哪個按鈕被點擊。據我所知,這是用這樣的一種方法完成的:如何判斷哪個按鈕被點擊onClick()
public void onClick(View view) {
// Do something
}
而在該方法中,你必須找出哪個按鈕被點擊。那是對的嗎?
如果是這樣,我該如何分辨哪些被點擊?我有findViewById()返回的各種Button對象。我只是不知道如何使用它們來分辨哪個按鈕被點擊。
在您的活動類中實現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;
}
}
}
如果是這樣,我該如何判斷哪個被點擊?
老朋友開關將幫助你實現你的目標:
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
。
是的,它的工作原理。謝謝! –
@JB_User歡迎 – Sajmon
有不同的處理方法。與你目前有,你可以使用
public void onClick(View view) {
// Do something
view.getId();
}
將在android:id
在xml
返回值。您可以使用switch
語句來比較這些值以決定要執行的操作並切換到id
。您也可以在每個button
的xml
中分配onClick()
。
<Button
...
android:onClick="functionName"/>
然後在Java代碼中,你可以有
public void functionName(View view) {
// Do something
}
而且view
這裏點擊將在button
您在xml
分配這個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!
}
});
您可以使用庫(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;
}
'@InjectView'在v7中被重命名爲'@ Bind',並在v8中被命名爲'@ BindView' – EpicPandaForce
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;
}
}
}
使用'this'? – enapupe