自定义类中的自定义对话框返回布尔值

时间:2012-09-04 12:29:25

标签: android class dialog

我已经找到了答案但没找到,所以请帮帮我:)。

我有一个自定义类:

public class CustomClass {

    private final Context ctx;
    public CustomClass(Context ctx) {
        this.ctx = ctx;
    }

    public boolean setDialog(int head, int text) {
        final boolean value;

        final Dialog d = new Dialog(ctx);
        d.requestWindowFeature(Window.FEATURE_NO_TITLE);
        d.setContentView(R.layout.custom2_dialog);

        TextView txtHead = (TextView) d.findViewById(R.id.custom2_txtHead);
        txtHead.setText(ctx.getResources().getString(head));
        TextView txtText = (TextView) d.findViewById(R.id.custom2_txtText);
        txtText.setText(ctx.getResources().getString(text));

        Button btnOK = (Button) d.findViewById(R.id.custom2_btnOK);
        btnOK.setText("OK");
        btnOK.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                value = true;
                d.dismiss();
            }
        });

        Button btnNO = (Button) d.findViewById(R.id.custom2_btnNO);
        btnNO.setText("NO");
        btnNO.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                value = false;
                d.dismiss();
            }
        });

        d.show();

        return value;
    }
}

您可以看到我在自定义类中创建了自定义对话框,因为我不希望在每个活动中创建对话框。现在当我在一个Activity中使用它时:

CustomClass cC = new CustomClass(this);
if(cC.setDialog(R.string.head, R.string.text)) {
    // user checked OK
} else {
   // user checked NO
}

如何知道用户是否选中了OK或NO,因为返回true,false值在自定义类中不起作用,对话框在用户点击之前不会等待,它会自动返回一个值。

3 个答案:

答案 0 :(得分:0)

以下是您问题的解决方案。 首先,如果要创建“自定义”对话框,则必须扩展对话框类以阅读响应并实现 OnClickListener

class CustomizeDialog extends Dialog implements OnClickListener
{
  // some code
public CustomizeDialog(Activity activity, String title, String msg, int i, Typeface typeface) 
    {
        super(activity);        
        this.activity = activity;
        intFlag = i;
        setContentView(R.layout.relative);
        dialogButtonYes = (Button) findViewById(R.id.buttonCustomDialogYes);
        dialogButtonNo = (Button) findViewById(R.id.buttonCustomDialogNo);
        textView = (TextView) findViewById(R.id.textViewCustomTitle);
        this.msg = msg;
        dialogButtonNo.setOnClickListener(this);
        dialogButtonYes.setOnClickListener(this);
    }
}

@Override
public void onClick(View v) {
        if (v == dialogButtonYes)
        {
            Intent intent =new Intent(activity, CallForOne.class);
            activity.startActivity(intent);
            dismiss();
        }
        else
            dismiss();
    }
    else if(intFlag == 2)
    {
        if (v == dialogButtonYes)
        {
            Intent intent =new Intent(activity, CallMe.class);
            activity.startActivity(intent);
            dismiss();
        }
        else
            dismiss();
}

relative.xml 文件

<TextView
    android:id="@+id/textViewCustomTitle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp" />

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/textViewCustomTitle"
    android:orientation="horizontal"
    android:paddingBottom="1.0dip"
    android:paddingLeft="4.0dip"
    android:paddingRight="4.0dip"
    android:paddingTop="5.0dip" >

    <Button
        android:id="@+id/buttonCustomDialogYes"
        style="@style/styleNormalButton"
        android:layout_width="0.0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1.0"
        android:text="@string/yes" />

    <Button
        android:id="@+id/buttonCustomDialogNo"
        style="@style/styleNormalButton"
        android:layout_width="0.0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1.0"
        android:text="@string/no" />
</LinearLayout>

主要课程

    class Main implements OnClickListener
    {
    onCreate()
    {
    //your code
    }

    public void on click()
    {
    customizeDialog = new CustomizeDialog(CustomDialogExample.this,getString(R.string.title_for_one),getString(R.string.msg_for_one),1,"String");
    customizeDialog.show();
    }
}

答案 1 :(得分:0)

我在这里遇到了同样的问题,然后我找到了一个解决方案,可以通过单击自定义对话框中的按钮来打开活动。但是您也可以将此逻辑用于其他操作。

我的自定义方法:

appBar: AppBar(
  title: Text("2nd page"),
  leading: IconButton(
    icon: Icon(Icons.delete), 
    onPressed: (){
    // handle delete here
   }),
)

您可以这样调用此方法:

public class Extension extends Activity{

  public void showDialogConfirma(Activity localActivity, Class destActivity, String titulo, String mensagem){

    final Dialog dialog = new Dialog(localActivity);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.dialog_um_btn);

    TextView textTitulo = dialog.findViewById(R.id.txtTitle);
    textTitulo.setText(titulo);

    Button btnOk = dialog.findViewById(R.id.btnOk);
    btnOk.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dialog.dismiss();
            // here I can open any activity from any class
            localActivity.startActivity(new Intent(localActivity, destActivity));
        }
    });

    dialog.show();

  }
}

答案 2 :(得分:-1)

首先来自@ user370305的评论是正确的方法。可以有其他方式毫无疑问。

您遇到的问题是因为您在调用自定义类的方法时

   if(cC.setDialog(R.string.head, R.string.text));

即使没有点击任何内容,您也可以获得该值

 return value;

为false,这是您声明

时设置的默认值
final boolean value;

相反,你应该听取取消和确认点击