gpt4 book ai didi

java - 如何在 BottomSheetDialogFragment 中的 TextView 上设置文本

转载 作者:行者123 更新时间:2023-11-29 02:39:36 26 4
gpt4 key购买 nike

我有一个自定义的 BottomSheetDialogFragment,我想从我的 MainActivity 设置它的 TextView。我试图获取对其 View 的引用,但出现空指针异常。我从我的 MainActivity 创建 Fragment,如下所示:

public void buttonClick(View view) {
CustomBottomSheetDialogFragment bottomSheetDialogFragment = new CustomBottomSheetDialogFragment();
View sheetView = bottomSheetDialogFragment.getView();
TextView sheetText = (TextView) sheetView.findViewById(R.id.cmp1);
sheetText.setText("blah");
bottomSheetDialogFragment.show(getSupportFragmentManager(), "Dialog");
}

这是我的 BottomSheetDialogFragment 类:

public class CustomBottomSheetDialogFragment extends BottomSheetDialogFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.content_bottom_sheet, container, false);
return v;
}
}

这是 XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/bottomSheetLayout"
android:layout_width="match_parent"
android:layout_height="300dp"
android:background="@android:color/white"
android:padding="16dp"
app:behavior_hideable="true"
app:behavior_peekHeight="60dp"
app:layout_behavior="@string/bottom_sheet_behavior">

<TextView
android:id="@+id/bottomSheetHeading"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Test"
android:textAppearance="@android:style/TextAppearance.Large" />

<TextView
android:id="@+id/cmp1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/bottomSheetHeading"
android:layout_centerHorizontal="true"
android:layout_marginTop="16dp"
android:text="Test Message"
android:textAppearance="@android:style/TextAppearance.Medium" />

</RelativeLayout>

如何正确获取对 textview 的引用?谢谢!

编辑:这是错误:

java.lang.IllegalStateException: Could not execute method for android:onClick
at android.view.View$DeclaredOnClickListener.onClick(View.java:4725)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at android.view.View$DeclaredOnClickListener.onClick(View.java:4720)
at android.view.View.performClick(View.java:5637) 
at android.view.View$PerformClick.run(View.java:22429) 
at android.os.Handler.handleCallback(Handler.java:751) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:154) 
at android.app.ActivityThread.main(ActivityThread.java:6119) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
at com.gofrontrow.conductor_mobile.MainActivity.buttonClick(MainActivity.java:108)
at java.lang.reflect.Method.invoke(Native Method) 
at android.view.View$DeclaredOnClickListener.onClick(View.java:4720) 
at android.view.View.performClick(View.java:5637) 
at android.view.View$PerformClick.run(View.java:22429) 
at android.os.Handler.handleCallback(Handler.java:751) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:154) 
at android.app.ActivityThread.main(ActivityThread.java:6119) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

最终编辑:最后,我只是为该 fragment 创建了一个构造函数并以这种方式传递了字符串。我用了this作为指南发布。

最佳答案

我提出了一种不同的方法,只需在您的 BottomSheetDialogFragment 中创建一个名为 buttonClick 或其他名称的方法。在 onCreateView 内部将 TextView 绑定(bind)到它的 id ,如下所示:

View v = inflater.inflate(R.layout.content_bottom_sheet, container, false);
// declare it as a field at the top of the class
sheetText = (TextView) v.findViewById(R.id.cmp1);
return v;

现在您已经有了对 sheetText TextView 的引用,您可以像这样创建一个普通方法:

void onButtonClick(String text){
sheetText.setText(text);
}

你可以像这样从 MainActivity 调用这个:

public void buttonClick(View view) {
CustomBottomSheetDialogFragment bottomSheetDialogFragment = new CustomBottomSheetDialogFragment();
bottomSheetDialogFragment.show(getSupportFragmentManager(), "Dialog");
bottomSheetDialogFragment.onButtonClick("whatever);
}

此外,如果您不想在 MainActivity 中不断更改按钮单击时的文本,您也可以将参数传递给构造函数,如果我误解了您的 Intent 的话。

关于java - 如何在 BottomSheetDialogFragment 中的 TextView 上设置文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45107710/

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