Android - 覆盖Fragment上的DialogFragment方法

时间:2014-02-24 17:52:30

标签: android android-fragments android-dialogfragment viewpagerindicator

我在使用DialogFragment时遇到一些问题。我的应用程序必须显示三个不同的对话框:一个带有数字选择器,另一个用于创建项目,另一个用于编辑项目。 我在这个活动中使用了viewpagerindicator,因此当我点击listview项目(片段)时,在操作栏(Activity)和其他人中调用创建项目的那个。

我创建了一个带有三个实例的DialogFragment,每个布局一个,我可以打开而不会出现问题。我也在Activity和Fragment中实现了接口。

我的问题是如何在我的片段中返回我的对话框,因为我在活动(对于第一个布局)和片段(对于另一个)中覆盖了“onDialogPositiveClick”两个布局)但它只在活动中被调用。

我的对话:

private static int idLayout;
private static Item myItem;

public interface MyDialogListener {
    public void onDialogPositiveClick(SherlockDialogFragment dialog,
            int layout);

    public void onDialogPositiveClick(SherlockDialogFragment dialog,
            int layout, ItemComanda item);

    public void onDialogNegativeClick(SherlockDialogFragment dialog);
}

MyDialogListener bListener;

public static MyDialog newItem(String title) {
    idLayout = R.layout.dialog_item;

    MyDialog fragment = new MyDialog();
    Bundle args = new Bundle();
    args.putString("title", title);
    fragment.setArguments(args);
    return fragment;
}

public static MyDialog editItem(String title, Item item) {
    idLayout = R.layout.dialog_item;
    myItem = item;

    MyDialog fragment = new MyDialog();
    Bundle args = new Bundle();
    args.putString("title", title);
    args.putString("name", item.getNm_item());
    args.putDouble("price", item.getVl_item());
    fragment.setArguments(args);
    return fragment;
}

public static MyDialog newNumberPicker(String title,
        Item item, int max, int min) {
    idLayout = R.layout.dialog_number_picker;
    myItem = item;

    MyDialog fragment = new MyDialog();
    Bundle args = new Bundle();
    args.putString("title", title);
    args.putInt("value", item.getQuantity());
    args.putInt("max", max);
    args.putInt("min", min);
    fragment.setArguments(args);
    return fragment;
}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);

    try {
        bListener = (MyDialogListener) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString()
                + " implement MyDialogListener");
    }
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    LayoutInflater inflater = LayoutInflater.from(getActivity());
    final View v = inflater.inflate(idLayout, null);

    String title = getArguments().getString("title");

    Dialog myDialog = new AlertDialog.Builder(getSherlockActivity())
            .setTitle(title)
            .setView(v)
            .setPositiveButton(android.R.string.ok,
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog,
                                int which) {
                            if (myItem == null) {
                                bListener.onDialogPositiveClick(
                                        MyDialog.this, idLayout);
                            } else {
                                bListener.onDialogPositiveClick(
                                        MyDialog.this, idLayout, myItem);
                            }

                        }
                    })
            .setNegativeButton(android.R.string.cancel,
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog,
                                int which) {
                            bListener
                                    .onDialogNegativeClick(MyDialog.this);
                        }
                    }).create();

    switch (idLayout) {
    case R.layout.dialog_number_picker:
        numberPicker(v);
        break;
    case R.layout.dialog_bill_item:
        itemDialog(v);
        myDialog.getWindow().setSoftInputMode(
                LayoutParams.SOFT_INPUT_STATE_VISIBLE);
        break;
    }

    return myDialog;
}

private void itemDialog(View v) {
    EditText txtName = (EditText) v.findViewById(R.id.txt_item_name);
    EditText txtPrice = (EditText) v.findViewById(R.id.txt_item_price);

    String name = getArguments().getString("name");
    Double price = getArguments().getDouble("price", 0.0);

    txtName.setText(name);
    txtPrice.setText(String.valueOf(price));

    txtName.requestFocus();
}

private void numberPicker(View v) {
    int value = getArguments().getInt("value");
    int max = getArguments().getInt("max");
    int min = getArguments().getInt("min");

    NumberPicker np = (NumberPicker) v.findViewById(R.id.numberPicker);
    np.setMaxValue(max);
    np.setMinValue(min);
    np.setFocusable(false);
    np.setFocusableInTouchMode(false);
    np.setValue(value);
}

0 个答案:

没有答案