Android DialogFragment不';我没有出现
最后,我发现了问题所在 如果您有这样一个函数:Android DialogFragment不';我没有出现,android,dialog,Android,Dialog,最后,我发现了问题所在 如果您有这样一个函数: public void test() { DialogFragment dlg = new LoginDialog(); dlg.show(getSupportFragmentManager(), "login"); } 对话框只会在test()完成时出现,我不确定这是否是Android对话框工作的唯一方式,但我肯定会阅读更多关于这个的内容 原始问题: 我是android世界的新手,有人能给我点启示吗 dlg.show()毫无例
public void test()
{
DialogFragment dlg = new LoginDialog();
dlg.show(getSupportFragmentManager(), "login");
}
对话框只会在test()完成时出现,我不确定这是否是Android对话框工作的唯一方式,但我肯定会阅读更多关于这个的内容
原始问题: 我是android世界的新手,有人能给我点启示吗 dlg.show()毫无例外地执行,但什么也没发生,我应该怎么做才能知道出了什么问题?该项目使用安卓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>
也许你用碎片交易来代替:
public class MainActivity extends FragmentActivity
{
...
DialogFragment dlg = new LoginDialog();
dlg.show(getSupportFragmentManager().beginTransaction(), "login");
}
编辑:
我鼓励你们去看看谷歌指南。您对alertbuilder的自定义视图所做的操作可能会导致它无法显示。如果您改用FragmentTransaction:
public class MainActivity extends FragmentActivity
{
...
DialogFragment dlg = new LoginDialog();
dlg.show(getSupportFragmentManager().beginTransaction(), "login");
}
编辑:
我鼓励你们去看看谷歌指南。您对alertbuilder的自定义视图所做的操作可能会导致它无法显示。尝试使用newInstance()创建您的片段 然后在你的主要活动中
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");
}
}
尝试使用newInstance()创建片段 然后在你的主要活动中
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");
}
}
糟糕的是,我在问题的顶部添加了关于问题原因的信息 编辑(针对@MarcinS的评论):
该对话框不会在dlg.show()之后立即显示,而是在doThat()完成后显示。我的错,我已在问题的顶部添加了有关问题原因的信息 编辑(针对@MarcinS的评论):
对话框不会在dlg.show()之后立即显示,而是在doThat()完成后显示。我遇到了相同的问题,即在onResume之后对话框不会显示。(我有一个对话框通知用户他已经暂停了游戏,并询问他是否想继续)。我只是提前调用了它,我想原因是我在onPostResume()中的dialog.show()之后加载了一个片段。我通过检测dialog.show是否在队列中解决了这个问题,并简单地等待它的显示,直到加载片段后的onPostResume 这是显示对话框的功能:
@覆盖
public void onShowUserDialog(字符串标题、字符串消息、int类型){
FragmentTransaction fm=getSupportFragmentManager().beginTransaction();
Fragment prev=getSupportFragmentManager()。
findFragmentByTag(PublicVar.DIALOG\u用户);
如果(上一个!=null){
fm.移除(上一个);
提交();
}
如果(已恢复){
DialogFragment userDialog=userDialog。
newInstance(标题、消息、类型);
显示(getSupportFragmentManager().beginTransaction(),PublicVar.DIALOG\u用户);
dialogTitle=“”;
dialogMessage=“”;
dialogType=0;
}
else{//保存以备以后使用
dialogTitle=标题;
dialogMessage=消息;
对话类型=类型;
}
}
hasPostResume、dialogTitle、dialogMessage和dialogType在活动中声明
这是活动恢复时的最后一次调用:
protected void onPostResume() {
super.onPostResume();
hasPostResumed = true;
...function for loading my fragments...
if (dialogType != 0) {
onShowUserDialog(dialogTitle, dialogMessage, dialogType);
}
}
我也有同样的问题,在恢复后对话框没有出现。(我有一个对话框通知用户他已经暂停了游戏,并询问他是否想继续)。我只是提前调用了它,我想原因是我在onPostResume()中的dialog.show()之后加载了一个片段。我通过检测dialog.show是否在队列中解决了这个问题,并简单地等待它的显示,直到加载片段后的onPostResume 这是显示对话框的功能:
@覆盖
public void onShowUserDialog(字符串标题、字符串消息、int类型){
FragmentTransaction fm=getSupportFragmentManager().beginTransaction();
Fragment prev=getSupportFragmentManager()。
findFragmentByTag(PublicVar.DIALOG\u用户);
如果(上一个!=null){
fm.移除(上一个);
提交();
}
如果(已恢复){
DialogFragment userDialog=userDialog。
newInstance(标题、消息、类型);
显示(getSupportFragmentManager().beginTransaction(),PublicVar.DIALOG\u用户);
dialogTitle=“”;
dialogMessage=“”;
dialogType=0;
}
else{//保存以备以后使用
dialogTitle=标题;
dialogMessage=消息;
对话类型=类型;
}
}
hasPostResume、dialogTitle、dialogMessage和dialogType在活动中声明
这是活动恢复时的最后一次调用:
protected void onPostResume() {
super.onPostResume();
hasPostResumed = true;
...function for loading my fragments...
if (dialogType != 0) {
onShowUserDialog(dialogTitle, dialogMessage, dialogType);
}
}
FragmentTransaction.commit()
(当您显示对话框fragment
时调用它)不会立即提交,而是在主线程准备就绪时提交。因为您希望立即完成,所以必须在显示对话框后添加getSupportFragmentManager().executePendingTransactions()
来源:,.
FragmentTransaction.commit()
(当您显示对话框fragment
时会调用它)不会立即提交,而是在主线程准备就绪时提交。因为您希望立即完成,所以必须在显示对话框后添加getSupportFragmentManager().executePendingTransactions()
来源:,。我想你忘了设置youtDialogFragment的样式了
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NORMAL, R.style.MY_DIALOG);
}
尝试以下一种样式:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mNum = getArguments().getInt("num");
// Pick a style based on the num.
int style = DialogFragment.STYLE_NORMAL, theme = 0;
switch ((mNum-1)%6) {
case 1: style = DialogFragment.STYLE_NO_TITLE; break;
case 2: style = DialogFragment.STYLE_NO_FRAME; break;
case 3: style = DialogFragment.STYLE_NO_INPUT; break;
case 4: style = DialogFragment.STYLE_NORMAL; break;
case 5: style = DialogFragment.STYLE_NORMAL; break;
case 6: style = DialogFragment.STYLE_NO_TITLE; break;
case 7: style = DialogFragment.STYLE_NO_FRAME; break;
case 8: style = DialogFragment.STYLE_NORMAL; break;
}
switch ((mNum-1)%6) {
case 4: theme = android.R.style.Theme_Holo; break;
case 5: theme = android.R.style.Theme_Holo_Light_Dialog; break;
case 6: theme = android.R.style.Theme_Holo_Light; break;
case 7: theme = android.R.style.Theme_Holo_Light_Panel; break;
case 8: theme = android.R.style.Theme_Holo_Light; break;
}
setStyle(style, theme);
}
阅读更多关于:
您还可以为对话框片段设置自定义样式
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NORMAL, R.style.MY_DIALOG);
}
我想你忘了设置youtDialogFragment
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NORMAL, R.style.MY_DIALOG);
}
尝试以下一种样式:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mNum = getArguments().getInt("num");
// Pick a style based on the num.
int style = DialogFragment.STYLE_NORMAL, theme = 0;
switch ((mNum-1)%6) {
case 1: style = DialogFragment.STYLE_NO_TITLE; break;
case 2: style = DialogFragment.STYLE_NO_FRAME; break;
case 3: style = DialogFragment.STYLE_NO_INPUT; break;
case 4: style = DialogFragment.STYLE_NORMAL; break;
case 5: style = DialogFragment.STYLE_NORMAL; break;
case 6: style = DialogFragment.STYLE_NO_TITLE; break;
case 7: style = DialogFragment.STYLE_NO_FRAME; break;
case 8: style = DialogFragment.STYLE_NORMAL; break;
}
switch ((mNum-1)%6) {
case 4: theme = android.R.style.Theme_Holo; break;
case 5: theme = android.R.style.Theme_Holo_Light_Dialog; break;
case 6: theme = android.R.style.Theme_Holo_Light; break;
case 7: theme = android.R.style.Theme_Holo_Light_Panel; break;
case 8: theme = android.R.style.Theme_Holo_Light; break;
}
setStyle(style, theme);
}
阅读更多关于:
您还可以为对话框片段设置自定义样式
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NORMAL, R.style.MY_DIALOG);
}
如果确定正在调用代码的第一位,请在创建对话框之前尝试将
finish()
放在右边。如果你的应用程序关闭,那么你的对话框有问题,但是如果它没有