可以使用相同的变量定义所有Widget ID吗?

时间:2015-08-30 04:31:22

标签: java android xml

我的意思是这样的

button = (Button)findViewById(R.id.button1);
button = (Button)findViewById(R.id.button2);
button = (Button)findViewById(R.id.button3);
button = (Button)findViewById(R.id.button4);
button = (Button)findViewById(R.id.button5);    
button.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v){ 

                //Do same logic              

            }
         });
     }

可以这样定义吗?或者它会导致力量关闭?

还有一个问题,可以使用从当前xml到另一个xml的复制ID吗?我的意思是xml是不同的,但Widget和ID是相同的,并在不同的类中定义ID。因为复制比使用新Id更简单,所以可以吗?

示例:

所以在activityone.xml中

我有这个

enter image description here

所以我将小部件复制到activitytwo.xml,因此它们具有相同的小部件和ID

enter image description here

如果我这样做可以吗?

2 个答案:

答案 0 :(得分:1)

这只会为button5设置监听器。每次分配按钮都会丢失之前的分配,因此当您设置监听器时,变量按钮不会知道它曾经指向button1到4。

所以不,它不起作用。

我对你的第二个问题发表评论。

答案 1 :(得分:0)

为此你应该有单个监听器,但有五个不同的按钮(Objects)。目前,您将逐个分配每个按钮到相同的button引用。这样,您的buttonR.id.button5,而在更多代码中,您将无法参考之前的按钮butons1-4。因此,当您向button添加侦听器时,您实际上只将侦听器添加到按钮5,而任何其他按钮都不会有该侦听器。

首先,您需要五个不同的buttons,您应该创建实现侦听器的类,并将该侦听器的实例添加到setOnClicklistener方法中,或者以更好的方式指定{{1}在您的android:onClick="onClick"中添加xml方法。

例如:

onClick

<强> OR

//.. on create
Button button1 = (Button)findViewById(R.id.button1);
Button button2 = (Button)findViewById(R.id.button2);
Button button3 = (Button)findViewById(R.id.button3);
Button button4 = (Button)findViewById(R.id.button4);
Button button5 = (Button)findViewById(R.id.button5); 

ListenerClass listener = new ListenerClass();
button1.setOnClickListener(listener);
button2.setOnClickListener(listener);
//..and so on

//Create class
public class ListenerClass implements View.OnClickListener {

     //...
     @Override
     public void onClick(View view) {
          //You can determine which button is clicked by view.getId()    
          //Add logic here
     } 
 }
  

可以使用从当前xml到另一个xml的复制ID吗?

是的它很好,但你应该避免使用它,因为它可能会造成长期混乱。在与团队合作的广泛项目中,可能会在理解这一问题时产生问题。除此之外,您可以拥有相同的ID,因为当您调用public class YourActivity implements View.OnClickListener { //...on create button1.setOnClickListener(this); button2.setOnClickListener(this); //..and so on //... @Override public void onClick(View view) { //You can determine which button is clicked by view.getId() //Add logic here } } 时,它将引用当前视图,并且不会受到其他视图的ID的影响。