2015-01-15 185 views
0

下面是我试过的。 “Forward” class extends Activity。它包含两个按钮。在这个类中,我们使用for循环创建了两个对象“收集器”类。在循环的第一次迭代中,我们创建第一个按钮。第二,我们再创建一个按钮。我们为这两个按钮设置了“OnClickListener”。但只有第二个按钮响应点击。第一个按钮不响应点击。我试图使用相同的变量名称(b1) - 我想坚持OO原则,不创建单独的对象来实现我的目标。 - 另外我期待2个对象的属性作为独立的实体。请帮助我。问候。按钮没有响应点击事件

Forward.java(是一种活动,包含两个按钮):

下面是一个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: 
    } 
    } 
    } 

回答

1

你给你的按钮,一个新的ID。

第一,你写道:

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

在第二开关您写道:

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

谢谢。但是,两者都是不同的对象? – Sohail

+0

对于我来说,我也认为所有其他人都很难理解你正在尝试做什么。你在哪里创建你的新收藏家?收集器在何处设置内容视图?如果您经过循环并收集器将内容视图设置为您的转发器活动,则只会设置第二种情况。第一个案件被第二个案件“覆盖”。 – Opiatefuchs

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: 
} 
} 
} 
0

您已在交换机的情况下误以为你被点名了两个按钮B1时的第二个对象开始创建b1不再是Button1现在它是Button2,因此您只为Button2设置onclick监听器为您的按钮使用自定义类或尝试删除新对象,如b2 b3 祝你好运soheil

0

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

0

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

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