2011-09-05 42 views
-3

代码:视图改变类的Android神秘

 Button b = new Button(this); 
     b.setText(m.group()); 

     RelativeLayout.LayoutParams lP = new RelativeLayout.LayoutParams(
       RelativeLayout.LayoutParams.WRAP_CONTENT, 
       RelativeLayout.LayoutParams.WRAP_CONTENT); 

     int iDELETE_AFTER_TEST_ID; 

     if(bLast != null){ 
      /* 
      * Add a new move button 
      */ 
      iId = bLast.getId(); 
      lP.addRule(RelativeLayout.RIGHT_OF, iId); 
      bLast = b; 
      bLast.setId(iId + 1); 
      iDELETE_AFTER_TEST_ID = iId + 1; 
     }else{ 
      /* 
      * Add the first of the move buttons 
      */ 
      bLast = b; 
      bLast.setId(R.id.base_button_arrangement_id); 
      lP.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 

      iDELETE_AFTER_TEST_ID = R.id.base_button_arrangement_id; 
     } 

     b.setLayoutParams(lP); 
     b.setPadding(20, 10, 20, 50); 
     Log.d(TAG, " going to add = " + b.getId() + " class = " + b.getClass()); 
     rl.addView(b); 
     mNumberofMoveOptions++; 



     View v = findViewById(iDELETE_AFTER_TEST_ID); 

     if(v != null){ 
      if(v.getClass() == Button.class){ 
       Log.d(TAG, " id = " + b.getId() + " class = " + b.getClass()); 
      }else{ 
       Log.e(TAG, "Corruption has occured - not button type: " + 
         iDELETE_AFTER_TEST_ID + " class: " + v.getClass()); 
      } 
     }else{ 
      Log.e(TAG, "Corruption has occured - view is null: " + iDELETE_AFTER_TEST_ID); 
     } 

调试:

将添加= 2130968581类=类android.widget.Button

腐败已发生 - 而不是按钮类型:2130968581 class:class android.widget.TextView

Question:

So即使调试清楚地显示了小部件被创建为Button,但当我直接查询它时,它已被转换或更改为TextView。我是否错误地查询,或ID是否被回收或发生其他事情?

我之前创建的按钮,在这个特定的工作之前完全正常工作,并且被创建并保持为Button小部件类型。

非常感谢任何帮助提前。

+0

你的帖子中没有期号。如果您没有提出具体问题,我们将无法为您提供帮助 – pandre

+0

对不起,它不清楚。我已经编辑了这篇文章,以更具体。 – Cullan

回答

0

马克墨菲在另一个董事会友好地回答。

原因似乎是ID的种子由工具生成的ID驱动的事实。

使用用户定义的ID似乎解决了这个问题,我遇到的一些其他的随机问题最初不会相关,但实际上是相关的。