Android:findviewbyid:当视图不在由setContentView调用的相同布局上时,通过id查找视图

时间:2010-02-16 08:52:44

标签: android layout

我有一个从MapActivity扩展的活动MyActivity。在包含布局的.xml文件中,我只能包含MapView

<com.google.android.maps.MapView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/trail_map_view"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true"
    android:apiKey="key"
/>

但是,我确实需要找到另一个位于另一个.xml文件中的视图。 不幸的是,findViewById返回null。 如何获得我要查找的视图?

非常感谢!

6 个答案:

答案 0 :(得分:71)

感谢您发表评论,我明白您的意思,但我不想查看旧值。我只想得到一个指向该视图的指针。

查看其他人的代码我刚刚找到了解决方法,您可以使用LayoutInflater访问布局的根目录。

代码如下,其中this是一个活动:

final LayoutInflater factory = getLayoutInflater();

final View textEntryView = factory.inflate(R.layout.landmark_new_dialog, null);

landmarkEditNameView = (EditText) textEntryView.findViewById(R.id.landmark_name_dialog_edit);

您需要获取this上下文的inflater,通过inflate方法访问根视图,最后在布局的根视图上调用findViewById

希望这对某人有用!再见

答案 1 :(得分:5)

我改变了我的活动但受影响了。 这是我的代码:

View layout = getLayoutInflater().inflate(R.layout.list_group,null);
        try {
            LinearLayout linearLayout = (LinearLayout) layout.findViewById(R.id.ldrawernav);
            linearLayout.setBackgroundColor(Color.parseColor("#ffffff"));
        }
        catch (Exception e) {

        }

    }

答案 2 :(得分:4)

尝试:

Activity parentActivity = this.getParent();
if (parentActivity != null)
{
    View landmarkEditNameView = (EditText) parentActivity.findViewById(R.id. landmark_name_dialog_edit);
}

答案 3 :(得分:2)

另一种方法是:

// inflate the layout
View myLayout = LayoutInflater.from(this).inflate(R.layout.MY_LAYOUT,null);

// load the text view
TextView myView = (TextView) myLayout.findViewById(R.id.MY_VIEW);

答案 4 :(得分:0)

这是不可能的。您只能查找和访问当前正在运行的视图。如果你想检查ex的值。您必须保存值的previus活动中使用的TextView是SharedPreferences,数据库,文件或通过Intent传递。

答案 5 :(得分:0)

我用过

View.inflate(getContext(), R.layout.whatever, null)

使用 View.inflate 可以防止在 null 处使用 getLayoutInflater().inflate() 的警告。