【问题标题】:Android How to find and set the content view in a DialogFragmentAndroid 如何在 DialogFragment 中查找和设置内容视图
【发布时间】:2014-04-02 12:23:56
【问题描述】:

我正在尝试制作自定义加载对话框。

public class LoadingDialogFragment extends DialogFragment {

String title = "";
String message = "";

public LoadingDialogFragment() {

}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    title = getArguments().getString("title");
    message = getArguments().getString("message");

    Dialog dialog = new Dialog(getActivity());
    View view = getView().findViewById(R.id.loading_dialog_view);
    dialog.setContentView(view);
    dialog.setCancelable(false);
    dialog.setTitle(title);

    return dialog;
}
}

这是我正在尝试加载的 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/loading_dialog_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ProgressBar
    android:id="@+id/progressBar1"
    style="?android:attr/progressBarStyleLarge"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:layout_gravity="center"/>

当我尝试获取我的视图时,我的应用程序崩溃了。

我这样称呼这个对话框片段:

    public void showLoadingDialog(String title, String message) {
    loadingDialogFragment = new LoadingDialogFragment();
    Bundle args = new Bundle();
    args.putString("title", title);
    args.putString("message", message);
    loadingDialogFragment.setArguments(args);
    loadingDialogFragment.show(fragManager, "loadingDialog");
}

public void dismissLoadingDialog() {
    if (loadingDialogFragment != null) {
        loadingDialogFragment.dismiss();
    }
}

如何在 DialogFragment 中设置我的 Dialog 的内容视图?

错误:

04-02 21:07:49.156: E/AndroidRuntime(3390): FATAL EXCEPTION: main
04-02 21:07:49.156: E/AndroidRuntime(3390): java.lang.NullPointerException
04-02 21:07:49.156: E/AndroidRuntime(3390):     at com.example.rhino68mobileapp.ConnectingActivity.OnError(ConnectingActivity.java:96)
04-02 21:07:49.156: E/AndroidRuntime(3390):     at com.example.rhino68mobileapp.ConnectingActivity$1.onFailure(ConnectingActivity.java:79)
04-02 21:07:49.156: E/AndroidRuntime(3390):     at com.loopj.android.http.AsyncHttpResponseHandler.handleMessage(AsyncHttpResponseHandler.java:373)
04-02 21:07:49.156: E/AndroidRuntime(3390):     at com.loopj.android.http.AsyncHttpResponseHandler$ResponderHandler.handleMessage(AsyncHttpResponseHandler.java:135)
04-02 21:07:49.156: E/AndroidRuntime(3390):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-02 21:07:49.156: E/AndroidRuntime(3390):     at android.os.Looper.loop(Looper.java:137)
04-02 21:07:49.156: E/AndroidRuntime(3390):     at android.app.ActivityThread.main(ActivityThread.java:4424)
04-02 21:07:49.156: E/AndroidRuntime(3390):     at java.lang.reflect.Method.invokeNative(Native Method)
04-02 21:07:49.156: E/AndroidRuntime(3390):     at java.lang.reflect.Method.invoke(Method.java:511)
04-02 21:07:49.156: E/AndroidRuntime(3390):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
04-02 21:07:49.156: E/AndroidRuntime(3390):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
04-02 21:07:49.156: E/AndroidRuntime(3390):     at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 你在onCreateDialog()里面调用super.onCreate(),应该是super.onCreateDialog()

标签: android android-fragments android-view android-fragmentactivity android-dialogfragment


【解决方案1】:

覆盖此方法:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
          View view = inflater.inflate(R.layout.loading_dialog_view, container);
          //TODO your code here
}

【讨论】:

  • 您对 onCreateView 方法的实现给了我一个错误,它要我删除 Override?​​span>
【解决方案2】:

变化:

View view = getView().findViewById(R.id.loading_dialog_view);

View view = LayoutInflater.from(getActivity()).inflate(R.layout.nome_of_layout, null);

【讨论】:

  • 问题在 ConnectingActivity.java 的第 96 行
【解决方案3】:

获取super方法创建的对话框并设置其内容视图

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = super.onCreateDialog(savedInstanceState);

    View view = ...

    dialog.setContentView(view);
    return dialog;
}

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多