添加不同的 onClickListener 到动态创建的视图

Adding different onClickListener to dynamically creataed Views

我正在创建一个 android 应用程序,我正在其中动态创建 2 个 imageView 和 2 个按钮,我想为它们分配 onClickListeners 并且我想为它们中的每一个执行不同的功能。我在整个互联网上搜索过,但没有关于如何让视图在点击时发挥自己的功能的信息。

到目前为止我已经想到了这个:

    /* Setting the ids */
    leftImageView.setId(View.generateViewId());
    rightImageView.setId(View.generateViewId());
    sendButton.setId(View.generateViewId());
    setButton.setId(View.generateViewId());

    leftImageView.setOnClickListener(this);
    rightImageView.setOnClickListener(this);
    sendButton.setOnClickListener(this);
    setButton.setOnClickListener(this);



@Override
public void onClick(View v) {
    switch (v.getId()){
        case leftImageView.getId() : 
    }

下面是这段代码中的错误截图:

使用id常量-

@Override public void onClick(View v) {
    switch (v.getId()){
        case R.id.image_view: 
    }

使用 if-else 语句代替 switch。它会很好用。

您不能在 onclick 中使用 getId() 方法。 ID 应该是静态的。

您可以分配一些硬编码的 id 以在 onclicklistener 中查看和使用它。

@Override
public void onClick(View v) {
    switch (v){
        case 45: 
        Break;
    }
}

您可以使用多个 if else 或者可以使用 switch

public void onClick(View v) {
        if(v.getId()==leftImageView.getId())
        {

        }
        else
        if(v.getId()==rightImageView.getId())
        {

        }
    }

@Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.leftimage_view:
            break;
        }
    }

您必须为您的按钮分配一个已知 ID,如下所示:

  1. 在您的 Activity 中实施 View.OnClickListener

    public class Activity implements View.OnClickListener { }
    
  2. 生成已知 ID 并将按钮的回调注册到 OnClickListener

    leftImageView.setId(1);
    rightImageView.setId(2);
    sendButton.setId(3);
    setButton.setId(4);
    
    leftImageView.setOnClickListener(this);
    rightImageView.setOnClickListener(this);
    sendButton.setOnClickListener(this);
    setButton.setOnClickListener(this);
    
  3. 并且在您的 OnClick 方法中应该如下所示

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case 1:
                // leftImageView is click
                break;
            case 2:
                // rightImageView is click
                break;
            case 3:
                // sendButton is click
                break;
            case 4:
                // setButton is click
                break;
            default:
                break;
        }
    }
    

除了设置和获取 ID,您还可以简单地执行以下操作:

        leftImageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
        rightImageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
        sendButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
        setButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });