按钮未响应单击事件

时间:2015-01-15 08:37:50

标签: android

以下是我的尝试。 “转发”类扩展了Activity。它包含两个按钮。在这个类中,我们使用for循环创建两个“Collector”类的对象。在循环的第一次迭代中,我们创建第一个按钮。在第二个中,我们再创建一个按钮。我们为这两个按钮设置了“OnClickListener”。但只有第二个按钮响应点击。第一个按钮不响应点击。我正在尝试使用相同的变量名称(b1) - 我希望通过不创建单独的对象来实现我的目标来坚持OO原则。 - 此外,我期待2个对象的属性作为单独的实体。请帮助我。问候。

Forward.java(是一个Activity,包含两个按钮):

下面是一个for循环,我在其中创建了2个收集器类对象。

    for (int i = 0; i < 2; i++) {
       new Collector(this, i); 
    }

Collector.java:

    public class Collector {
        Forwarder f;
        int n;
        Button b1; 

        public Collector(Forwarder caller, int i) {
            f = caller;
            n = i; // 0 or 1  
            f.setContentView(R.layout.forwarder); 

            switch(n)
            {
            case 0:
            b1 = (Button) f.findViewById(R.id.button1);
            b1.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View arg0) {
                    // get a new Contact
                    Intent i = new Intent(Intent.ACTION_PICK,
                            ContactsContract.Contacts.CONTENT_URI);
                    f.startActivityForResult(i, 1);
                    // onActivityResult has to be implemented in f because
                    // f extends Activity class
                }
            });
            break;

             case 1:
            b1 = (Button) f.findViewById(R.id.button2);
            b1.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View arg0) {
                    // get a new Contact
                    Intent i = new Intent(Intent.ACTION_PICK,
                            ContactsContract.Contacts.CONTENT_URI);
                    f.startActivityForResult(i, 1);
                }
            });
            break;
            default:
    }
    }
    }

5 个答案:

答案 0 :(得分:1)

您为按钮添加了新ID。

首先,你写道:

     b1 = (Button) f.findViewById(R.id.button1);

在第二个开关你写道:

       b1 = (Button) f.findViewById(R.id.button2);

答案 1 :(得分:0)

public class Collector {
    Forwarder f;
    int n;
    Button b1; 

    public Collector(Forwarder caller, int i) {
        f = caller;
        n = i; // 0 or 1  
        f.setContentView(R.layout.forwarder); 

        switch(n)
        {
        case 0:
        b1 = (Button) f.findViewById(R.id.button1);
        b1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                // get a new Contact
                Intent i = new Intent(Intent.ACTION_PICK,
                        ContactsContract.Contacts.CONTENT_URI);
                f.startActivityForResult(i, 1);
                // onActivityResult has to be implemented in f because
                // f extends Activity class
            }
        });
        break;

         case 1:
        b1 = (Button) f.findViewById(R.id.button1);
        b1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                // get a new Contact
                Intent i = new Intent(Intent.ACTION_PICK,
                        ContactsContract.Contacts.CONTENT_URI);
                f.startActivityForResult(i, 1);
            }
        });
        break;
        default:
}
}
}

答案 2 :(得分:0)

你的开关案例中你错误地在第二个对象开始创建时命名了两个按钮b1 b1不再是Button1现在它是Button2所以你只为Button2设置onclick监听器使用自定义类为你的按钮或尝试去除像b2 b3这样的新对象 祝你好运soheil

答案 3 :(得分:0)

检查按钮名称。它们是相同的(b1)。更改第二个变量名称,一切都应该完美。该死的复制粘贴:P

答案 4 :(得分:0)

我不知道为什么会出现这种行为的答案,但是如果你添加一些东西作为澄清的一部分或者改写你的问题,它会明确地帮助你,否则人们会认为这是一些新手的错误。 - 清楚地提到您知道您正在尝试使用相同的变量名称(b1) - 你想通过不创建单独的对象来实现你的目标,坚持OO原则。 - 您还可以提到您期望2个对象的属性作为单独的实体。

希望它有所帮助。一切顺利。