自定义警告框对话框片段错误

时间:2014-02-26 21:10:38

标签: android

按活动A上的删除按钮。将打开以下自定义片段。因此,如果我按下自定义警报框上的“确定”按钮,如何使其运行在活动A中的deleteRecord()函数。我的自定义警报框的代码是:

public class CustomAlertBoxFragment extends DialogFragmentBase implements
        android.view.View.OnClickListener {

    public Activity c;
    public TextView messageTextView;
    public Boolean proceed;
    public String messages;
    private MyFragment mListener;

    interface MyFragment {
        public void removeAllButton_onClick();
    }

    public CustomAlertBoxFragment(Activity a,Boolean proceed, String message) {
        this.messages = message;
        this.proceed = proceed;
        this.c = a;
        Vibrator v = (Vibrator) c.getSystemService(Context.VIBRATOR_SERVICE);
        v.vibrate(25);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        getActivity().setTheme(android.R.style.Theme_Holo_Light_Dialog);
        mListener = (MyFragment)activity;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.icon_custom_alertbox, container, false);

        super.onCreate(savedInstanceState);

        messageTextView = (TextView) v.findViewById(R.id.messageTextView);
        v.findViewById(R.id.okButton).setOnClickListener(this);
        v.findViewById(R.id.closeButton).setOnClickListener(this);
        messageTextView.setText(messages);

        getActivity().setTheme(R.style.iconDialogTheme);
        return v;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.okButton:
                mListener.removeAllButton_onClick();
                break;
            case R.id.closeButton:
                dismiss();
                break;
            default:
                break;
        }
        dismiss();
    }
}

2 个答案:

答案 0 :(得分:2)

在CustomAlertBoxFragment中声明一个接口:

interface AlertBoxListener {
      public void onDeleteRecord();
}

在您的活动中实施此界面。

public class DashboardActivity extends Activity implements CustomAlertBoxFragment.AlertBoxListener {
 ....

   public void onDeleteRecord() {
        Toast.makeText(this, "IT WORKS", Toast.LENGTH_SHORT).show();
   }

现在将参考文献存储在对话框中:

public class CustomAlertBoxFragment ... {

    private AlertBoxListener mListener; 


    @Override
    public void onAttach(Activity activity) {
         ....
         mListener = (AlertBoxListener)activity;
    }

   @Override
   public void onClick(View v) {
    switch (v.getId()) {
        case R.id.okButton:
            mListener.onDeleteRecord();
            break;
         ....
   }

只需在需要时调用onDeleteRecord - 它将在您的活动中运行

答案 1 :(得分:-1)

  1. AFAIK,默认情况下,活动获取附加到其中的片段中存在的按钮的所有onClick事件。因此,您只需在MainActivity中使用onClick方法并处理计算。如果我在这里错了,请有人纠正我。

  2. 或者,使用界面。 (Tutorial

  3. 最后,最糟糕的方法是,您可以通过覆盖onAttach()来存储活动实例,然后只需调用活动A中的方法。

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        ActivityA activityA = ((ActivityA ) activity);
    }
    
  4. 以及您需要的任何地方:

        activityA.yourMethodHere(someRandomParam);