【问题标题】:button click outside of dialog按钮单击对话框外
【发布时间】:2016-08-11 20:01:46
【问题描述】:

我的布局中有 2 个按钮。首先显示吐司,另一个显示对话框。我希望能够单击第一个按钮并显示 toast,即使显示对话框也是如此。目前,当我触摸第一个按钮(第一次)时,对话框被关闭,当我再次触摸第一个按钮(第二次)时,显示吐司。我想要的是在第一次点击时显示吐司。有可能吗?

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context="com.sam.myregistrationapplication.MainActivity">


    <Button
        android:id="@+id/btn1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="50dp"
        android:text="close dialog"/>

    <Button
        android:id="@+id/btn2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/btn1"
        android:layout_margin="50dp"
        android:text="show dialog"/>

</RelativeLayout>
public class MainActivity extends AppCompatActivity {

    Button btn1, btn2;
    Dialog pDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn1 = (Button)findViewById(R.id.btn1);
        btn2 = (Button)findViewById(R.id.btn2);

        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getApplicationContext(), "First Button", Toast.LENGTH_SHORT).show();
            }
        });


        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                pDialog = new Dialog(MainActivity.this);
                pDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                pDialog.setContentView(R.layout.alertdialog);


                pDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);



                Button dialogButton = (Button) pDialog.findViewById(R.id.btn3);

                dialogButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        pDialog.dismiss();
                    }
                });

                pDialog.show();

            }
        });

    }
}

【问题讨论】:

标签: android dialog


【解决方案1】:

如果 Diologue 显示该时间,您将无法单击活动中的任何按钮。第二件事是,如果您不想在任务完成之前关闭对话,请使用以下行 -

pDialog.setCancelable(false); 

【讨论】:

    【解决方案2】:

    使用两个按钮

        <?xml version="1.0" encoding="utf-8"?>
        <RelativeLayout 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"
          tools:context="com.sam.myregistrationapplication.MainActivity">
    
    
            <Button
                android:id="@+id/btn1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="50dp"
                android:text="close dialog"/>
    
            <Button
                android:id="@+id/btn2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/btn1"
                android:layout_margin="50dp"
                android:visibility="gone"
                android:text="show dialog"/>
    
        </RelativeLayout> 
    

    现在在单击第一个按钮时显示第二个按钮并隐藏第一个按钮, 与单击第二个按钮时显示第一个按钮和隐藏第二个按钮相同。试试这个,把你想要做的事件放在点击第一个和第二个按钮上。

        public class MainActivity extends AppCompatActivity {
    
            Button btn1, btn2;
            Dialog pDialog;
    
           @Override
           protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);
    
             btn1 = (Button)findViewById(R.id.btn1);
             btn2 = (Button)findViewById(R.id.btn2);
    
             btn1.setOnClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View view) {
                Toast.makeText(getApplicationContext(), "First Button", Toast.LENGTH_SHORT).show();
                btn1.setVisibility(View.GONE);
                btn2.setVisibility(View.VISIBLE);
               }
             });
    
    
            btn2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                btn1.setVisibility(View.VISIBLE);
                btn2.setVisibility(View.GONE);
                  pDialog = new Dialog(MainActivity.this);
                  pDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                  pDialog.setContentView(R.layout.alertdialog);
        pDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
    
    
    
                Button dialogButton = (Button) pDialog.findViewById(R.id.btn3);
    
                dialogButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        pDialog.dismiss();
                     }
                  });
    
                  pDialog.show();
    
              }
           });
    
        }
     }
    

    【讨论】:

    • 我不想让任何按钮的可见性消失。我只想能够在显示弹出窗口时单击第一个按钮@anurag
    猜你喜欢
    • 1970-01-01
    • 2019-01-30
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    相关资源
    最近更新 更多