Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Start a fragment via Intent within a Fragment

I want to launch a new fragment to view some data. Currently, I have a main activity that has a bunch of actionbar tabs, each of which is a fragment. So, within a tab fragment, I have a button, chartsButton. I have my onclicklistener all set for it, and here's the onClick method:

public OnClickListener chartsListener = new OnClickListener() {      @Override     public void onClick(View v) {         Intent chartFragment = new Intent();         startActivity(chartFragment);        } }; 

Now, as I said, this listener is within a class that extends Fragment. So, I want to launch a new fragment (chartsFragment) via the intent to replace the whole screen. When the user clicks back, it'll bring them back to the tabs and main activity. Here's my chart fragment:

public class chartsFragment extends Fragment {      public View onCreateView() {         //LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState         LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);         return (inflater.inflate(R.layout.chartfragment, null));     } } 

The current error I am dealing with: "android.content.ActivityNotFoundException: No Activity found to handle Intent { }". That's fine, I understand that I could use getActivity().startActivity(chartsFragment), but that results in the same error. I suppose what I am looking for here, is how do I launch an intent from within a fragment that results in opening a new fragment?

like image 838
Davek804 Avatar asked Mar 22 '12 22:03

Davek804


People also ask

How do I start an intent from a fragment?

If you want to start a new instance of mFragmentFavorite , you can do so via an Intent . Intent intent = new Intent(this, mFragmentFavorite. class); startActivity(intent); If you want to start aFavorite instead of mFragmentFavorite then you only need to change out their names in the created Intent .

What is the process of starting a new fragment?

Step 1: Create a New Project To create a new project in Android Studio please refer to How to Create/Start a New Project in Android Studio. Step 2: Right-click on the First button inside java, then click on New. Step 2: Then Go to Fragment. Step 3: (The next step is to choose the Fragment type.


1 Answers

The answer to your problem is easy: replace the current Fragment with the new Fragment and push transaction onto the backstack. This preserves back button behaviour...

Creating a new Activity really defeats the whole purpose to use fragments anyway...very counter productive.

@Override public void onClick(View v) {     // Create new fragment and transaction     Fragment newFragment = new chartsFragment();      // consider using Java coding conventions (upper first char class names!!!)     FragmentTransaction transaction = getFragmentManager().beginTransaction();      // Replace whatever is in the fragment_container view with this fragment,     // and add the transaction to the back stack     transaction.replace(R.id.fragment_container, newFragment);     transaction.addToBackStack(null);      // Commit the transaction     transaction.commit();  } 

http://developer.android.com/guide/components/fragments.html#Transactions

like image 151
slinden77 Avatar answered Sep 22 '22 06:09

slinden77