以下是我的尝试。 “转发”类扩展了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:
}
}
}
答案 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个对象的属性作为单独的实体。
希望它有所帮助。一切顺利。