Android神秘视图改变类

时间:2011-09-05 18:55:14

标签: android layout

代码:

        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 class = class android.widget.Button

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

问题:

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

我在创建之后创建的按钮完全正常工作,并且创建为Button小部件类型并保留。

非常感谢您提前提供任何帮助。

1 个答案:

答案 0 :(得分:0)

马克墨菲在另一个董事会上好心回答。

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

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