繁体   English   中英

用Activity的生命周期创建可重用对话框的最佳方法是什么?

What is the best way of creating a reusable dialog with Activity's lifecycle?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我想建造..

  • 可重用的对话框
  • 完全可自定义的布局(自定义颜色或字体等)
  • 通过引用的活动维护其生命周期
  • 使用重载,我可以创建对话框的多种变体,即标题,消息和回调的组合
  • 以简单的方式(如果可能)

目前,我的自定义对话框类如下所示:

public class CustomAlert {

public interface OnSingleClickedListener {
    public void onPositiveClicked();
}

public interface OnDualClickedListener {
    public void onPositiveClicked();
    public void onNegativeClicked();
}

/**
 * Show simple alert without callback.
 * @param context
 * @param msg
 */
public static void showAlert(Context context, String msg) {
    final Dialog dialog = new Dialog(context);
    // Do some stuff

    ok.setOnClickListener(new Button.OnClickListener() {

        @Override
        public void onClick(View view) {
            dialog.dismiss();
        }
    });
    dialog.show();
}

/**
 * Show simple alert with callback.
 * @param context
 * @param msg
 * @param listener
 */
public static void showAlert(Context context, String msg, final OnSingleClickedListener listener) {
    final Dialog dialog = new Dialog(context);
    // Do some stuff

    ok.setOnClickListener(new Button.OnClickListener() {

        @Override
        public void onClick(View view) {
            dialog.dismiss();
            listener.onPositiveClicked();
        }
    });
    dialog.show();
}
// Some other methods..
}

我从Activity调用这些警报是这样的:

if(!isFinishing()) {
    CustomAlert.showAlert(MainActivity.this, getResources().getString(R.string.network_no_connection));
}

即使我正在调用isFinishing()来检查主机Activity是否正在运行,我仍然看到BadTokenExceptionis your Activity running? ,我认为isFinishing()还不够。

我发现本文使用的是DialogFragment ,但是当我考虑上述要求时,我觉得对于这么小的任务,这是很多代码。

解决此问题的最推荐,最有效的解决方案是什么?

提前致谢!

1 个回复

创建一个像这样的自定义类,我已经在名为Debongo的应用程序中创建了此对话框,可以在游戏商店中使用“拇指向上”和“拇指向下”

//recommend dialog
public void showRecommendDialog(Context mContext)
{
     dialog = new Dialog(mContext,android.R.style.Theme_Holo_Dialog_NoActionBar);
     dialog.setContentView(R.layout.recommend_dialog);
     dialog.show();

    btnThumbsUp = (ImageButton) dialog.findViewById(R.id.btn_Yes);
    btnThumbsDown = (ImageButton) dialog.findViewById(R.id.btn_no);
    txtMsg=(TextView) dialog.findViewById(R.id.txtMsg);

    ImageButton cancelRecommend=(ImageButton) dialog.findViewById(R.id.cancelRecommend);
    cancelRecommend.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            dialog.dismiss();
            dialog=null;
        }
    });

    btnThumbsUp.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            //do what you want
        }
    });


    btnThumbsDown.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            //do what you want
        }
    });
}

这是相同的布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
android:gravity="center"
android:padding="5dp" >

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="5dp" >

    <ImageButton
        android:id="@+id/cancelRecommend"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:background="@android:color/transparent"
        android:contentDescription="@null"
        android:src="@drawable/com_facebook_close" />

    <TextView
        android:id="@+id/txtMsg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/cancelRecommend"
        android:layout_marginBottom="@dimen/viewSpace3"
        android:layout_marginLeft="@dimen/viewSpace3"
        android:layout_marginRight="@dimen/viewSpace3"
        android:text="Do You Want To Recommend This Restaurant ?"
        android:textColor="#000000"
        android:textSize="@dimen/titlebar_textSize"
        tools:ignore="HardcodedText" />

    <View
        android:layout_width="0dip"
        android:layout_height="@dimen/viewSpace3" />

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/txtMsg"
        android:layout_centerHorizontal="true"
        android:layout_gravity="center" >

        <ImageButton
            android:id="@+id/btn_Yes"
            android:layout_width="@dimen/viewSpace5"
            android:layout_height="wrap_content"
            android:background="@android:color/transparent"
            android:contentDescription="@null"
            android:src="@drawable/unselected_thumbs_up" />

        <View
            android:id="@+id/vvv"
            android:layout_width="@dimen/viewSpace1"
            android:layout_height="@dimen/viewSpace3"
            android:layout_toRightOf="@id/btn_Yes" />

        <ImageButton
            android:id="@+id/btn_no"
            android:layout_width="@dimen/viewSpace5"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@id/vvv"
            android:background="@android:color/transparent"
            android:contentDescription="@null"
            android:src="@drawable/unselected_thumbs_down" />

    </RelativeLayout>

</RelativeLayout>

现在,当您要打开此对话框时,只需使用

showRecommendDialog(this);
1 有可重用对话框的最佳方法是什么?

在Android中创建可重用对话框的最佳方法是什么? 通过Dialog开发指南阅读,我知道我可以使用AlertDialog.Builder(this); 在我的一个Activity ,但如果我想在多个活动中使用它,该怎么办? 如果这是其他类,我会扩展它,所以MyDialog exten ...

2 使用OpenGL处理​​Activity生命周期的正确方法是什么

我真的在这里挣扎,而且它阻碍了我。 处理OpenGL的正确方法是什么,以及一个Activity - 它启动子活动,或者返回主屏幕。 让它恢复到原来的位置。 我现在半工作,纹理/ VBO在需要时在onResume()重新加载。 但有时,当启动子活动并返回,或进入主屏幕并返回时, ...

5 Android生命周期演示如何制作对话框?

我正在查看android dev网站( http://developer.android.com/training/basics/activity-lifecycle/index.html )上提供的生命周期演示。 单击暂停按钮时会出现一个对话框,但是我无法弄清楚它在对话框中将对话活动变成对话 ...

9 finish()和Activity生命周期

我正在学习一门课程的Android编程,我有一个关于finish()如何适应Activity生命周期的快速问题。 当你调用finish()时,会启动什么生命周期回调? 我认为它是onPause(),然后是onStop()和onDestroy()。 它是否正确? 真的,我只是想确保 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM