【问题标题】:OnclickListener in a Dialog AndroidDialog Android 中的 OnclickListener
【发布时间】:2016-07-18 05:02:01
【问题描述】:

您好,我正在开发一个应用程序,其中我在活动上使用对话框,对话框有一个按钮,但是当我想使用 OnClickListener(来自活动)时,它不起作用。我尝试在互联网上搜索解决此问题的方法,但找不到合适的方法来实现它。那么任何人都可以建议一种这样做的方法......

public void btnStartDialog(View view) {
    final Dialog dialog = new Dialog(this);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.custom_dialog);
    final VideoView videoview = (VideoView) dialog.findViewById(R.id.videoView);
    Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.video);
    videoview.setVideoURI(uri);
    videoview.start();
    videoview.requestFocus();

    final Button stop = (Button)dialog.findViewById(R.id.btnStop);

    stop.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    videoview.stopPlayback();
                    dialog.dismiss();
                }
            });

    dialog.show();
    Thread timerThread = new Thread() {
        public void run() {
            try {
                sleep(34800);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                videoview.stopPlayback();
                dialog.dismiss();
                //close();
            }
        }
    };
    timerThread.start();

}

BTN XML:

 <android.support.design.widget.FloatingActionButton
    android:layout_width="56dp"
    android:layout_height="56dp"
    android:src="@drawable/fab_plus"
    app:backgroundTint="#d20b0d"
    app:borderWidth="0dp"
    app:elevation="10dp"
    app:fabSize="normal"
    android:onClick="btnStartDialog"
    app:pressedTranslationZ="12dp"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="10dp" />

【问题讨论】:

  • dialog.show();移到clickListener下方。
  • 保留你的代码行 dialog.show() ;在最后的 Button stop = (Button)dialog.findViewById(R.id.btnStop); onclicklistener 下方的行(或)
  • 不工作,同样的问题:(

标签: android button dialog onclicklistener


【解决方案1】:

stop.setOnClickListenerlike 之后显示对话框,

final Dialog dialog = new Dialog(this);

   //Your codes here

    stop.setOnClickListener(
            new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            videoview.stopPlayback();
            dialog.dismiss();
        }
    });

   dialog.show();

【讨论】:

  • @AdrianTesore 同样的错误意味着什么?您是否尝试过在按钮的单击处理程序中烘烤任何东西?您确定它被调用了吗?或者你遇到了一些错误?
  • 我在我的代码中发现了 2 个问题,1 - dialog.show();在 onClickListener 结束时,第二个非常愚蠢的问题是它是一个 FloatingActionButton xD !谢谢
【解决方案2】:

试试这个方法..

final Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
View view = LayoutInflater.from(activity).inflate(R.layout.custom_dialog,
            null);
dialog.setContentView(view );

final VideoView videoview = (VideoView) view.findViewById(R.id.videoView);
Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.video);
videoview.setVideoURI(uri);
videoview.start();
videoview.requestFocus();

final Button stop = (Button) view.findViewById(R.id.btnStop);

dialog.show();

stop.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        videoview.stopPlayback();
        dialog.dismiss();
    }
 });

【讨论】:

    【解决方案3】:

    拨打dialog.show();在所有的初始化和接口注册之后,或者将对话框与您的活动分开以使您的代码模块化,您可以执行以下操作:

    1. 创建一个class 扩展Dialog
    2. 在您的对话框class 中创建一个method 以接受OnClickListener 并将其保存在对话框class 内的class 级别class
    3. activity 启动该对话框调用后,而不是使用activity's 对话框的方法。
    4. 在您的Dialog class 中,在对话框的按钮上设置一个新的OnClickListener
    5. 点击该按钮只需手动回调activity'sOnClickListener

    希望对你有帮助!

    【讨论】:

    • "在所有初始化和接口注册之后调用dialog.show()。"这就是重点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多