Reputation: 15515
I am new to Fragments
in Android. Just tried to learn about DialogFragment
. But it says 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 error is:
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)
Edit 1#
This FragmentDialog
is the one tab of 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)));
...
...
}
This is why ((FragmentDialog)getActivity()).showDialog();
this line returns com.example.fragmentexample.FragmentTabs cannot be cast to com.example.fragmentexample.FragmentDialog
. How can I get the activity as MyDialogFragment
.
Upvotes: 0
Views: 949
Reputation: 2585
You want to display dialog on click of Button in Fragment.I have my code currently being used.
CustomDialog :
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;
}
}
Fragment :
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();
}
}
Upvotes: 0
Reputation: 2604
You have problem in following constructor.
static MyDialogFragment newInstance(int num)
{
MyDialogFragment f = new MyDialogFragment();
return f;
}
It should be as follows,
static MyDialogFragment newInstance(int num)
{
MyDialogFragment f = new DialogFragment(); // Change is here.
return f;
}
Upvotes: 1