对于我的应用我需要显示一个底部动态对话框。我找到了这个解决方案:
public class bottomBar extends BottomSheetDialogFragment {
public TextView txtLabel;
@SuppressLint("RestrictedApi")
@Override
public void setupDialog(Dialog dialog, int style) {
super.setupDialog(dialog, style);
View contentView = View.inflate(getContext(), R.layout.bottom_bar, null);
dialog.setContentView(contentView);
txtLabel = contentView.findViewById(R.id.txtLabel);
}
wuith bottom_bar.xml像这样:
<TextView
android:id="@+id/txtLabel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp" />
从我的MainActivity中调用我的对话框,我尝试以这种方式更改txtLabel文本:
bottomBar bb = new bottomBar();
bb.txtLabel.setText(String.format("mytext %s %s?" , var1, var2));
bb.show(getSupportFragmentManager(), bb.getTag());
当我尝试调用setText()时,应用程序崩溃:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null objectbb.txtLabel
你能帮助我吗?
注意:如果我改变顺序,我会得到相同的结果:
bb.show(getSupportFragmentManager(), bb.getTag());
bb.txtLabel.setText(String.format("mytext %s %s?" , var1, var2));
答案 0 :(得分:0)
您的膨胀布局是bottom_bar.xml。但您的布局名称是layout_bar.xml。检查一下
答案 1 :(得分:0)
创建new bottomBar()
时,您的属性public TextView txtLabel;
未初始化。你应该首先尝试show()它来初始化这个属性。