Fringo
Fringo

Reputation: 313

Opening a fragment in another fragment

I have a view pager that has 3 fragments inside.
However, the first fragment has a listview.
I want to open a new fragment when I click on a ListView item.
I was able to make it work succefully with this code:

Fragment FullBrand = new FullBrand();
FragmentTransaction ft = getFragmentManager()
        .beginTransaction();
ft.replace(R.id.framebrands, FullBrand);
Bundle bundle = new Bundle();
FullBrand.setArguments(bundle);
ft.addToBackStack(null);
ft.commit();

However, when the new fragment launches, the viewpager is still there!
What to do? how can I get rid off them??
Thanks!

Upvotes: 0

Views: 775

Answers (2)

Akbarsha
Akbarsha

Reputation: 2568

You shouldn't try to remove the ViewPager instead better you can show the new Fragment (i.e FullBrand) in a DialogFragment . so If you click back it will bring you to old ViewPager only, it won't exit the app

To show a Dialog Fragment with FullScreen try the following code:

public class NewFragment extends DialogFragment {

private Dialog dialog;

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

    View view = inflater.inflate(R.layout.new_fragment_xml_here, container,
            false);

    return view;
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    dialog = new Dialog(getActivity(),
            android.R.style.Theme_Black_NoTitleBar);
    dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);

    return dialog;
    }
}

Then call this NewFragment from your ListView item click to show this as NewScreen which will look like a new screen:

NewFragment fragment = new NewFragment();
fragment.show(fragmentManager, "NewFragment");

I hope it would help you.

Upvotes: 1

Udi Oshi
Udi Oshi

Reputation: 6867

Seems like you're trying to replace one fragment inside the view pager.

If you want to replace the view pager fragment (with it's 3 child) and to show other fragment you need to call the transaction in the FragmentActivity and replace it in the current container.

Add callback to the activity and replace the whole container in the activity when listview item clicked.

Example to add listener

in view pager fragment, declare your interface:

public interface OnViewPagerClickListener {
    public void onBlaBla(Object arg);
}

in your Fragment Activity:

public class MyFragmentActivity implement ViewPagerFragment.OnViewPagerClickListener 

in your view pager fragment override onAttach & declare interface member

private OnViewPagerClickListener mCallback;

@Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        mCallback =(OnViewPagerClickListener) activity  **try catch this code**
    }

And wherever you want call the mCallback.onBlaBla(...) and do the rest in the activity.... This is very summarize lesson for interfaces :)

More info about interface and callback here Good luck.

Upvotes: 1

Related Questions