android - DialogFragment 不显示

标签 android dialog

最后,我发现问题是什么......

如果你有这样的功能:

public void test()
{
    DialogFragment dlg = new LoginDialog();
    dlg.show(getSupportFragmentManager(), "login");
}

对话框只会在 test() 完成时出现,我不确定这是否是 Android 对话框工作的唯一方式,但我一定会阅读更多关于此的内容...


原始问题:

我是 android 世界的新手,有人可以解释一下吗?

dlg.show() 无一异常(exception)地执行但没有任何反应,我应该怎么做才能知道出了什么问题?该项目使用 Android 2.2 的 API。

public class MainActivity extends FragmentActivity
{
    ...
    DialogFragment dlg = new LoginDialog();
    dlg.show(getSupportFragmentManager(), "login");
}

对话框布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<EditText
    android:id="@+id/username"
    android:inputType="textEmailAddress"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="16dp"
    android:layout_marginLeft="4dp"
    android:layout_marginRight="4dp"
    android:layout_marginBottom="4dp"
    android:hint="username" />
<EditText
    android:id="@+id/password"
    android:inputType="textPassword"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="4dp"
    android:layout_marginLeft="4dp"
    android:layout_marginRight="4dp"
    android:layout_marginBottom="16dp"
    android:hint="password"/>
</LinearLayout>

对话框类:

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.LayoutInflater;

public class LoginDialog extends DialogFragment
{
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState)
    {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        // Get the layout inflater
        LayoutInflater inflater = getActivity().getLayoutInflater();

        // Inflate and set the layout for the dialog
        // Pass null as the parent view because its going in the dialog layout
        builder.setView(inflater.inflate(R.layout.login_dialog, null))
        // Add action buttons
               .setPositiveButton("Sign In", new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       // sign in the user ...
                   }
               })
               .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                        // do something
                   }
               });
        return builder.create();
    }
}

最佳答案

尝试使用 newInstance() 创建您的 fragment

public class LoginDialog extends DialogFragment
{
    static LoginDialog newInstance(String title) {
        LoginDialog f = new LoginDialog();
        Bundle args = new Bundle();
        args.putString("title", title);
        f.setArguments(args);
        return f;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState)
    {
        .
        .
        .
    }
}

然后在您的 MainActivity 中

public class MainActivity extends Activity // notice that in my case I extend Activity instead of FragmentActivity
{
    @Override
    public void onCreate(Bundle savedInsatnceState) {
        super.onCreate(savedInsatnceState);
        setContentView(R.layout.main);
        LoginDialog dialogFragment = LoginDialog.newInstance("My Dialog");
        dialogFragment.show(getSupportFragmentManager(), "login");
    }
}

关于android - DialogFragment 不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13331388/

相关文章:

android - picasso 磁盘缓存

android - 如何同时缩放两个 ImageView?

validation - 如何修复验证提示中的通用对话框

ios - 这个花哨的 iOS 登录对话框是标准组件吗?

android - 如何通过 url schema 运行 Flutter?

android - 从 AsyncTask 设置 TextView 的文本时未找到资源 ID

android - 带有 packageRelease “specified for property ' signingConfig.storeFile' 的 Gradle 签名应用程序不存在”

c++ - WiX 中的自定义对话框和移植

javascript - jQuery UI 对话框 : Close when Click Outside

java - JOptionPane.showMessageDialog 不显示文本