2

Using Fragment in Class which is sub class of RoboActivity, Crashing application when Fragment Transaction begin;

I am also can't able to use Bottom navigation or Tablayout, maybe it's something relates roboguice.

This is Obd car Scan Application

Code As Below:

  public void onCreate(Bundle savedInstanceState) 

{
            super.onCreate(savedInstanceState);

            SpeedButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Fragment selectedFragment = null;
                    selectedFragment = new SpeedFragment();
                    AppCompatActivity activity=new AppCompatActivity();

                    if (!isFinishing() && !isDestroyed()) {
                        FragmentTransaction ft =activity.getSupportFragmentManager()
                                .beginTransaction();
                        ft.replace(R.id.fragment_container, selectedFragment);
                        ft.commit();
                    }
                }
            });
      }

Log:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.quad14.obdnewtry, PID: 7878
    java.lang.IllegalStateException: Activity has been destroyed
        at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:2114)
        at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:683)
        at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:637)
        at com.quad14.obdnewtry.activity.MainActivity$3.onClick(MainActivity.java:272)
        at android.view.View.performClick(View.java:5637)
        at android.view.View$PerformClick.run(View.java:22429)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6119)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

Layout: only Fragment related component are added below

 <FrameLayout
            android:id="@+id/fragment_container"
            android:layout_width="match_parent"
            android:layout_height="80dp"
            />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/buttonlinear"
            android:orientation="horizontal">
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Speed"
                android:id="@+id/speedbtid"/>

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Rpm"
                android:id="@+id/rpmbtid"/>
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Total Km"
                android:id="@+id/distanbtid"/>

        </LinearLayout>

    </LinearLayout>
DrMickeyLauer
  • 4,455
  • 3
  • 31
  • 67
Harsh ramani
  • 41
  • 1
  • 11
  • Which type of activity are you using? Activity or AppCompactActivity? And Which fragment ? android.support.v4.app.Fragment or android.app.Fragment? – Athira Jan 25 '19 at 08:14
  • MainActivity extends RoboActivity and Roboactivity extends Activity. I am using android.support.v4.app.Fragment – Harsh ramani Jan 25 '19 at 08:19
  • Either you extend Roboactivity from AppCompactActivity or change android.support.v4.app.Fragment to android.app.Fragment – Athira Jan 25 '19 at 08:23

3 Answers3

3

If your activity extends Activity your fragment should be android.app.Fragment. Then use code below

 android.app.FragmentTransaction ft =getFragmentManager()
                            .beginTransaction();
                    ft.replace(R.id.fragment_container, selectedFragment);
                    ft.commit();

else if your activity extends AppCompactActivity your fragment should be android.support.v4.app.Fragment.Then this code will work

 FragmentTransaction ft =getSupportFragmentManager()
                            .beginTransaction();
                    ft.replace(R.id.fragment_container, selectedFragment);
                    ft.commit();
Athira
  • 1,177
  • 3
  • 13
  • 35
  • I can't find beginTransaction(); in android.app.fragment class. So how can i do Fragment Transaction like you mention in your post of 1st block – Harsh ramani Jan 25 '19 at 08:40
  • 1
    Import android.app.FragmentTransaction and try now – Athira Jan 25 '19 at 09:44
  • @Learnerfrombeginning, first of all you can not create a new Instance of **AppCompatActivity** by yourself. Only **ActivityManager** is responsible of creating new instances of an Activity. Try the solution suggested by Athira. I think it will solve your issue. :) – Abhishek Jan 25 '19 at 09:52
  • Thank everyone for your support , I Found the solution : Instead of // AppCompatActivity activity=new AppCompatActivity(); try using RoboActivity activity=MainActivity.this; ,,,,by doing this i can get Fragment Transaction – Harsh ramani Jan 25 '19 at 10:57
  • 1
    You dont need to create activity object. You can call getFragmentManager() directly from activity – Athira Jan 25 '19 at 11:03
  • I did follow your instruction, that didn't solved my problem, still I am really grateful for help and effort, thank You – Harsh ramani Jan 25 '19 at 11:41
0

Instead of creating object for activity like AppCompatActivity activity=new AppCompatActivity(); and using it to get fragment manager.

You can get fragment manager from activity context something like this YourActivityname.this.getFragmentManager();

karan
  • 8,637
  • 3
  • 41
  • 78
  • If i do your way then getsupportFragmentManager can't be Resolve because: my Class doesn't extend require class if i change super class then other issues occurred,,, public class MainActivity extends RoboActivity {} – Harsh ramani Jan 25 '19 at 08:07
  • make your roboactivity extend appcompat activity – karan Jan 25 '19 at 08:12
  • roboactivity is class of library 'org.roboguice:roboguice:3.0.1', so i can't make change in it. btw Roboactivity extends Activity – Harsh ramani Jan 25 '19 at 08:17
0

try using

getContext().getSupportFragmentManager().beginTransaction();
V-rund Puro-hit
  • 5,518
  • 9
  • 31
  • 50
Siva Perumal
  • 457
  • 2
  • 8
  • 23
  • I have to use object of AppCompatActivity so if i do modification like u said then getSupportFragmentManger can't be resolve – Harsh ramani Jan 25 '19 at 08:24