【问题标题】:Communicating my Dialog with Main Activity将我的对话框与主要活动通信
【发布时间】:2014-12-28 20:14:10
【问题描述】:

我已经阅读了很多关于如何将 FragmentDialog 与 Activity 进行通信的教程,但我似乎无法使它们适应我的项目。

我想做的很简单,当用户单击我的 FragmentDialog 上的正按钮时,我想在主要活动中调用一个方法。一个简单的想法,但执行起来让我很生气。

我的主要 Activity 使用选项卡式浏览,我的想法是搞砸了。

这是我主要活动的简短版本。

public class MainActivity extends ActionBarActivity implements ActionBar.TabListener  {

   //.....

    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement

        if(id == R.id.menu_change_date){
            DialogFragment dialog = new Dialog_Elegir_Mes();
            dialog.show(getSupportFragmentManager(),"Elegir Mes");
        }

  //....

  public void dosomething() {

   }

 }

对话框

public class Dialog_Elegir_Mes extends DialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Build the dialog and set up the button click handlers
        AlertDialog.Builder adb = new AlertDialog.Builder(getActivity());
        LayoutInflater inflater = getActivity().getLayoutInflater();

        final View v = inflater.inflate(R.layout.diag_select_month,null);


        adb.setTitle("Elegir Mes");

        adb.setView(v)
                .setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {

                          //Here call dosomething();
                    }
                })
                .setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        Dialog_Elegir_Mes.this.getDialog().cancel();
                    }
                });


        return adb.create();
    }
}

【问题讨论】:

    标签: android android-fragments dialog


    【解决方案1】:

    创建一个接口并在 Activity 类中实现它,并将其引用传递给 Dialog 类。当用户点击对话框按钮时,使用接口调用方法。

    做这样的事情

    public interface OnMyDialogClick
    {
        public abstract void onPositiveButtonClick();
    }
    

    你的活动

    if(id == R.id.menu_change_date){
            DialogFragment dialog = new Dialog_Elegir_Mes(new OnMyDialogClick()
            {
                  @Override
                  public void onPositiveButtonClick()
                  {
                       //Call your activity method here
                  }
            });
            dialog.show(getSupportFragmentManager(),"Elegir Mes");
    }
    

    你的对话框类

    public class Dialog_Elegir_Mes extends DialogFragment {
    private OnMyDialogClick _onMyDialogClick = null;
    public Dialog_Elegir_Mes(OnMyDialogClick ref)
    {
        _onMyDialogClick = ref;
    }
    
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Build the dialog and set up the button click handlers
        AlertDialog.Builder adb = new AlertDialog.Builder(getActivity());
        LayoutInflater inflater = getActivity().getLayoutInflater();
    
        final View v = inflater.inflate(R.layout.diag_select_month,null);
    
    
        adb.setTitle("Elegir Mes");
    
        adb.setView(v)
                .setPositiveButton("Aceptar", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
    
                          _onMyDialogClick.onPositiveButtonClick();
                    }
                })
                .setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        Dialog_Elegir_Mes.this.getDialog().cancel();
                    }
                });
    
    
        return adb.create();
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-01
      • 2013-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多