gpt4 book ai didi

java - View#findViewById 在运行时返回 null 但在调试器中不返回 null

转载 作者:行者123 更新时间:2023-11-30 04:04:52 25 4
gpt4 key购买 nike

我的 android 项目中有一个非常奇怪的行为。

首先,我创建了一个名为 ANumberPicker 的自定义 View (以便在操作系统版本 < 3.0 的 Android 设备上使用它)。这是类的代码 fragment :

public class ANumberPicker extends LinearLayout {


// ...


@NotNull
private final NumberPickerButton incrementButton;

@NotNull
private final NumberPickerButton decrementButton;

public ANumberPicker(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);

setOrientation(VERTICAL);

// INFLATING LAYOUT
final LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.number_picker, this, true);

final InputFilter inputFilter = new NumberPickerInputFilter();
numberInputFilter = new NumberRangeKeyListener();

incrementButton = (NumberPickerButton) this.findViewById(R.id.increment);
incrementButton.setNumberPicker(this);

decrementButton = (NumberPickerButton) this.findViewById(R.id.decrement);
decrementButton.setNumberPicker(this);

// ...
}

// ...

}

这是 number_picker.xml 布局:

<merge xmlns:a="http://schemas.android.com/apk/res/android">

<org.solovyev.android.view.NumberPickerButton
a:id="@+id/increment"
a:layout_width="fill_parent"
a:layout_height="wrap_content"
a:background="@drawable/timepicker_up_btn"/>

<EditText a:id="@+id/timepicker_input"
a:layout_width="fill_parent"
a:layout_height="wrap_content"
a:gravity="center"
a:singleLine="true"
style="?android:attr/textAppearanceLargeInverse"
a:textColor="@android:color/primary_text_light"
a:textSize="30sp"
a:inputType="numberDecimal"
a:background="@drawable/timepicker_input"/>

<org.solovyev.android.view.NumberPickerButton
a:id="@+id/decrement"
a:layout_width="fill_parent"
a:layout_height="wrap_content"
a:background="@drawable/timepicker_down_btn"/>

在 ANumberPicker 构造函数中,我膨胀 'number_picker.xml' 布局并尝试通过 id 获取 View :inflater 与 attachToRoot = 'true' 参数一起使用。但是我在这一行的运行时有一个 NullPointerException:

incrementButton.setNumberPicker(this);

即incrementButton = null。

进一步在 Jetbrains IDEA 中调试此代码,我在“Watches”窗口中获得了下一个值(断点设置在带有 NPE 的源代码行上):

(NumberPickerButton) this.findViewById(R.id.increment) = {org.solovyev.android.view.NumberPickerButton@830082344688}
R.id.increment = 2131296256
this.getChildAt(0).getId() = 2131296256
incrementButton = null

即完全相同的代码在调试器中返回 not null。而且我无法弄清楚......有什么建议吗?问题可能在哪里?

PS 我清理了项目并重建了它(我使用 maven)

编辑我找到了线索:R.id.increment 和 View 具有不同的整数标识符(我只是在 Logcat 中记录了它们的 ID)。但问题仍然存在 - 清理项目无济于事......

最佳答案

已解决:Jetbrains IDEA 将之前构建的 R 文件存储在缓存中,因此“使缓存无效”解决了该问题。

关于java - View#findViewById 在运行时返回 null 但在调试器中不返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11862606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com