【问题标题】:findViewById returns null in android 4.4.4 onlyfindViewById 仅在 android 4.4.4 中返回 null
【发布时间】:2017-09-01 01:01:43
【问题描述】:

我在 Android 4.4.4 / 4.4.2 / 5.0.2 中使用了 findViewById() 。

但是 4.4.4 只有错误'NullpointException'。

这是我在 MainActivity 中的代码。

FrameLayout fl = (FrameLayout) this.findViewById(Util.StringToResourceID(this, "id", "main_map_fl"));

所有android都没有报错,但在4.4.4只返回null。

但是,

Util.StringToResourceID(this, "id", "main_map_fl")

它返回值。不为空。

我在该代码之前尝试了 setContentView。

我也先尝试了干净的项目。

我不知道为什么会导致错误。请帮帮我。

+)

这是我的 .xml 代码,其中包含“main_map_fl”。

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_rl"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<include
    android:id="@+id/main_tbt_ll"
    android:layout_width="200dp"
    android:layout_height="fill_parent"
    android:layout_alignParentRight="true"
    layout="@layout/layout_sub_tbt"
    android:visibility="visible" />

<FrameLayout
    android:id="@+id/main_map_fl"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent
    android:layout_toLeftOf="@+id/main_tbt_ll"
    android:background="#ffff0000" >
</FrameLayout>

<ImageView
    android:id="@+id/main_tbt_shadow_iv"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_toLeftOf="@+id/main_tbt_ll"
    android:background="@drawable/shadow_w" />
<LinearLayout
    android:id="@+id/main_action_ll"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:orientation="vertical">
    <TextView 
        android:id="@+id/main_action_set_admin_tv"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:gravity="center"
        android:background="#b2333333"
        style="@style/font_31p_255_255_255"/>
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/bottom_bar_bg" >
        <ImageButton
            android:background="@drawable/btn_main_actionbar_back"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/main_action_back_ib"
            android:layout_gravity="center_vertical"/> ...... 
    </LinearLayout>
</LinearLayout>

++)

Util.StringToResourceID

我认为它是包名和类 String 到 int。

public static int StringToResourceID(Context context, String _class, String _field) {
    int rval = 0;
    String a = context.getPackageName() + ".R$" + _class;

    try {
        Class Ra = Class.forName(a);

        try {
            rval = Ra.getField(_field).getInt(Ra);
        } catch (IllegalArgumentException var7) {
            ...........
    return rval;
}

【问题讨论】:

  • 什么是…Util.StringToResourceID
  • 我编辑了我的问题! @MartinMarconcini
  • 那么,返回的数字是多少?去看看 R.java 找到它
  • '2131427848' 被返回。我怎样才能找到? R.java中有这样的'0x7f0b ..'。 @cricket_007
  • 只打电话findViewById(R.id.main_map_fl) 是否有效?我真的不明白StringToResourceID() 方法在这里的意义。

标签: android android-framelayout findviewbyid


【解决方案1】:

您只想根据名称获取resourceId,对吗?这个怎么样?

public static int StringToResourceID(Context context, String _class, String _field) {
    return context.getResources().getIdentifier(_field, _class, context.getPackageName());
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    相关资源
    最近更新 更多