APCM
APCM

Reputation: 1714

FragmentActivity error Android Studio

Hi i am creating an activity with 4 selection in drawerlayout. Once the user select, a fragment will appear.

First I use Fragment and it run but when I try to convert it into FragmentActivity, i got an error on this line -

fragmentManager.beginTransaction().replace(R.id.main_fragment_container, fragment).commit();

 private void selectItemFragment(int position){

    FragmentActivity fragment = null;
    FragmentManager fragmentManager = getSupportFragmentManager();
    switch(position) {
        default:
        case 0:
            fragment = new FragmentDoctor();
            break;
        case 1:
            fragment = new FragmentHospital();
            break;
        case 2:
            fragment = new FragmentPharmacy();
            break;
        case 3:
            fragment = new FragmentClinic();
            break;
    }
    fragmentManager.beginTransaction().replace(R.id.main_fragment_container, fragment).commit();

FRAGMENT DOCTOR

public class FragmentDoctor extends FragmentActivity {


GoogleMap map;
public FragmentDoctor() {
    // Required empty public constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_doctor);
    setUpMapIfNeeded();

}

private void setUpMapIfNeeded() {

    if (map == null){

        map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();

        if (map != null){
            setUpMap();
        }
    }
}

private void setUpMap() {

    map.setMyLocationEnabled(true);

}

MAIN ACTIVITY

public class MainActivity extends ActionBarActivity {

private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
String[]titles = {"Doctor", "Hospital", "Pharmacy", "Specialty Clinic"};
private CharSequence mTitle;
private CharSequence mDrawerTitle;
private ActionBarDrawerToggle mDrawerToggle;
private Toolbar topToolBar;

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

    mTitle = mDrawerTitle = " ";

    topToolBar = (Toolbar)findViewById(R.id.toolbar);
    setSupportActionBar(topToolBar);
    topToolBar.setLogo(R.drawable.logo);
    topToolBar.setLogoDescription(" ");

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) findViewById(R.id.left_drawer);
    LayoutInflater inflater = getLayoutInflater();


    List<ItemObject> listViewItems = new ArrayList<ItemObject>();
    listViewItems.add(new ItemObject("Doctor", R.drawable.icon_doctor));
    listViewItems.add(new ItemObject("Hospital", R.drawable.icon_hospital));
    listViewItems.add(new ItemObject("Pharmacy", R.drawable.icon_pharmacy));
    listViewItems.add(new ItemObject("Specialty Clinic", R.drawable.icon_clinic));

    //FIRST FRAGMENT AFTER SPLASH SCREEN
    selectItemFragment(0);

    mDrawerList.setAdapter(new CustomAdapter(this, listViewItems));

    mDrawerToggle = new ActionBarDrawerToggle(MainActivity.this, mDrawerLayout, R.string.drawer_open, R.string.drawer_close) {

        /** Called when a drawer has settled in a completely closed state. */
        public void onDrawerClosed(View view) {
            super.onDrawerClosed(view);
            getSupportActionBar().setTitle(null);
            invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
        }

        /** Called when a drawer has settled in a completely open state. */
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            getSupportActionBar().setTitle(null);
            invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
        }
    };

    // Set the drawer toggle as the DrawerListener
    mDrawerLayout.setDrawerListener(mDrawerToggle);
    mDrawerToggle.setDrawerIndicatorEnabled(true);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);

    mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            selectItemFragment(position);
        }
    });
}

private void selectItemFragment(int position){

    Fragment fragment = null;
    FragmentManager fragmentManager = getSupportFragmentManager();
    switch(position) {
        default:
        case 0:
            fragment = new FragmentDoctor();
            break;
        case 1:
            fragment = new FragmentHospital();
            break;
        case 2:
            fragment = new FragmentPharmacy();
            break;
        case 3:
            fragment = new FragmentClinic();
            break;
    }

    fragmentManager.beginTransaction().replace(R.id.main_fragment_container, fragment).commit();

    mDrawerList.setItemChecked(position, true);
    setTitle(null);
    mDrawerLayout.closeDrawer(mDrawerList);
}
@Override
public void setTitle(CharSequence title) {
    mTitle = title;
    getSupportActionBar().setTitle(null);
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    mDrawerToggle.onConfigurationChanged(newConfig);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    // If the nav drawer is open, hide action items related to the content view
    boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
    return super.onPrepareOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }
    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

IMPORTS IN MAIN ACTIVITY

android.content.res.Configuration;
android.support.v4.app.Fragment;
android.support.v4.app.FragmentManager;
android.support.v4.widget.DrawerLayout;
android.support.v7.app.ActionBarActivity;
android.support.v7.app.ActionBarDrawerToggle;
android.os.Bundle;
android.support.v7.widget.Toolbar;
android.view.LayoutInflater;
android.view.Menu;
android.view.MenuItem;
android.view.View;
android.widget.ListView;

Upvotes: 1

Views: 1679

Answers (2)

RajaReddy PolamReddy
RajaReddy PolamReddy

Reputation: 22493

FragmentDoctor should extend from Fragment not from FragmentActivity change this code

 public class FragmentDoctor extends FragmentActivity {

like this

 public class FragmentDoctor extends Fragment {

and

private void selectItemFragment(int position){

FragmentActivity fragment = null;
FragmentManager fragmentManager = getSupportFragmentManager();
switch(position) {
    default:
    case 0:
        fragment = new FragmentDoctor();
        break;
    case 1:
        fragment = new FragmentHospital();
        break;
    case 2:
        fragment = new FragmentPharmacy();
        break;
    case 3:
        fragment = new FragmentClinic();
        break;
}

if(fragment != null) {
   fragmentManager.beginTransaction().
   replace(R.id.main_fragment_container, fragment).commit();
}

Upvotes: 1

AndiGeeky
AndiGeeky

Reputation: 11474

As below

import android.support.v4.app.FragmentActivity;

FragmentActivity is part of support-v4 library..

So please add below dependency to your gradle file :

 compile 'com.android.support:support-v4:23.0.1'

You can also add this library by following below steps in Android Studio :

  1. Select File
  2. Select Project Structure
  3. Select app
  4. Select dependencies
  5. Click on '+'
  6. Select library dependency
  7. Select support v4 library and
  8. Press 'OK'

Edited :

public class FragmentDoctor extends FragmentActivity {

And also From your edited code I have noticed that you are extending FragmentActivity not Fragment.

So please follow below link for more information on How to create Fragment with FragmentActivity :

http://www.codepuppet.com/2013/10/06/using-fragments-in-android-with-fragmentactivity/

Thanks

Upvotes: 0

Related Questions