将不同的onClickListener添加到动态creataed视图中

时间:2016-05-05 05:27:25

标签: android click views listeners setting

我正在创建一个Android应用程序,我在其中动态创建2个imageViews和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() : 
    }

以下是此代码中的错误消息:

enter image description here

5 个答案:

答案 0 :(得分:0)

使用id constant -

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

使用if-else语句而不是switch。它会正常工作。

答案 1 :(得分:0)

您可以使用Multipal 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;
        }
    }

答案 2 :(得分:0)

您必须为按钮分配一个已知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;
        }
    }
    

答案 3 :(得分:0)

您可以简单地执行以下操作,而不是设置和获取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) {

            }
        });

答案 4 :(得分:-1)

您无法在getId()中使用onclick方法。 我应该是静态的。

您可以指定一些硬编码的ID来查看并在onclicklistener中使用它。

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