0

我是FragmentsAndroid 新手。只是想了解一下DialogFragment。但它说classcastException

public class FragmentDialog extends Activity {

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

    void showDialog() {

        FragmentTransaction ft = getFragmentManager().beginTransaction();
        Fragment prev = getFragmentManager().findFragmentByTag("dialog");
        if (prev != null) {
            ft.remove(prev);
        }
        ft.addToBackStack(null);
        DialogFragment newFragment = MyDialogFragment.newInstance(0);
        newFragment.show(getFragmentManager(), "dialog");
    }

    public static class MyDialogFragment extends DialogFragment {

        static MyDialogFragment newInstance(int num) {
            MyDialogFragment f = new MyDialogFragment();

            return f;
        }

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            int style = DialogFragment.STYLE_NORMAL, theme = 0;
            setStyle(style, theme);
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.fragment_dialog, container,
                    false);

            Button button = (Button) v.findViewById(R.id.show);
            button.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                     ((FragmentDialog)getActivity()).showDialog(); // Error is in this line.
                }
            });
            return v;
        }
    }
}

LogCat 错误是:

07-12 15:22:25.241: E/AndroidRuntime(6419): java.lang.ClassCastException: com.example.fragmentexample.FragmentTabs cannot be cast to com.example.fragmentexample.FragmentDialog
07-12 15:22:25.241: E/AndroidRuntime(6419):     at com.example.fragmentexample.FragmentDialog$MyDialogFragment$1.onClick(FragmentDialog.java:74)

编辑1#

FragmentDialog是 的一个标签FragmentTabs

public class FragmentTabs extends Activity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    final ActionBar bar = getActionBar();
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);

    ...
    ...
    bar.addTab(bar.newTab()
            .setText("Dialog")
            .setTabListener(new TabListener<FragmentDialog.MyDialogFragment>(
                    this, "Dialog", FragmentDialog.MyDialogFragment.class)));
    ...
    ...
}

这就是((FragmentDialog)getActivity()).showDialog();这条线返回的原因com.example.fragmentexample.FragmentTabs cannot be cast to com.example.fragmentexample.FragmentDialog。我怎样才能将活动作为MyDialogFragment.

4

2 回答 2

1

您在以下构造函数中遇到问题。

    static MyDialogFragment newInstance(int num) 
    {
        MyDialogFragment f = new MyDialogFragment();

        return f;
    }

应该如下,

   static MyDialogFragment newInstance(int num) 
   {
        MyDialogFragment f = new DialogFragment();        // Change is here.

        return f;
   }
于 2013-07-12T09:32:13.720 回答
0

您想在单击片段中的按钮时显示对话框。我目前正在使用我的代码。

自定义对话框:

public class CustomDialog extends DialogFragment {


static CustomDialog newInstance() {
    return new CustomDialog();
}

private ProgressDialog mProgressDialog;

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    mProgressDialog = new ProgressDialog(getActivity());
    mProgressDialog.setView(new View(getActivity()));
    mProgressDialog.getWindow().setLayout(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT);
    mProgressDialog.setCancelable(true);
    mProgressDialog.setTitle(getResources().getString(R.string.title));
    mProgressDialog.setMessage(getResources().getString(R.string.message));
    mProgressDialog
            .setProgressStyle(android.R.style.Theme_DeviceDefault_Light);
    mProgressDialog.getWindow().setBackgroundDrawable(
            new ColorDrawable(android.graphics.Color.TRANSPARENT));


    return mProgressDialog;

}

}

片段:

public class MainFragment extends Fragment implements OnClickListener {
Button mButton;

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

    View v = inflater.inflate(R.layout.fragment_layout, container, false);
    mButton = (Button) v.findViewById(R.id.button1);
    mButton.setOnClickListener(MainFragment.this);
    return v;

}

void showDialog() {
    CustomDialog dialog= CustomDialog.newInstance();
    dialog.show(getFragmentManager(), "dialog");
}

@Override
public void onClick(View v) {
    showDialog();
}
}
于 2014-07-16T10:15:12.950 回答