8

我为 Next 和 Back 使用了两个图像按钮,我对那些我想要在 onclick 时触发哪个图像按钮并在 onclick 事件中为 next 或 back 运行特定功能的按钮使用 onclick 事件 我将如何在运行时获得哪个图像按钮触发或 onclick 事件

4

3 回答 3

12

使用 View.getId() 来区分触发 onClick 事件的不同视图。

@Override
public void onClick(View view) {
    switch (view.getId()) {
    case R.id.download:
    //code..
    break;
    case R.id.play:
    //code..
    break;
    case R.id.pause:
        //code..
    break;
    default:
        //code..
    break;
    }
}
于 2010-08-17T18:54:05.843 回答
12

您可以使用匿名内部类为每个按钮编写一个 onClick 函数。

Button button1 = getMyButton();
button1.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
      // button 1 was clicked!
   }
  });
Button button2 = getMyButton();
button2.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
      // button 2 was clicked!
   }
  });

正如 Konstantin 提到的,您还可以使用传入的 View 并打开 id。但是,如果你最终得到很多可点击的东西,我发现这有点混乱。

于 2010-08-17T18:56:25.427 回答
0

这可以通过ImageButtonXML中声明一个唯一 ID 来简单地完成,如下所示

<ImageButton 
     android:id="@+id/backButton"
     .../>
<ImageButton
     android:id="@+id/nextButton"
     .../>

然后在JAVA中,如果你使用

捆绑

这是通过为您的页面使用 ViewModel 然后您可以在方法中使用以下代码,onCreate()并且您必须将您的代码放在中间View root = binding.getRoot();return root;

View root = binding.getRoot();

ImageButton backBtn = binding.backButton;
ImageButton nextBtn = binding.nextButton;

//Now Comes the OnClickEvent using Lambda a easiest way

backBtn.setOnClickListener(a -> 
{
    //Your Handler Code for Back Button
});

nextBtn.setOnClickListener(b -> 
{
    //Your Handler Code for Next Button
});

return root;

那么对于

普通的

ImageButton backBtn = findViewById(R.id.backButton);
ImageButton nextBtn = findViewById(R.id.nextButton);

//onClickListeners
backBtn.setOnClickListener(a -> 
{
    //Your Handler Code for Back Button
});    
nextBtn.setOnClickListener(b -> 
{
    //Your Handler Code for Next Button
});

这个 Lambda 表达式可以通过两种方式完成,即

方法一

view.setOnCLickListener(method1 -> 
{
    //Your Handler Code
});

方法二

如果你已经定义了一个函数并且你要设置这个方法然后

view.setOnClickListener(method2 -> functionName(); );
于 2021-07-24T05:35:51.443 回答