0

I am having trouble on opening a new activity from a fragment my activity contain a map fragment v2 .. its working fine on api 4.0 and above .. but I am facing trouble on gingerbread 2.3.3 it gives me a force closed error .

public class PerxListDetailFragment extends ListFragment {

// Hashmap for ListView
ArrayList<PerxDetailListModel> datalist ;
protected PerxDetailListAdapter adapter;
protected ListView listview;
protected String url;
protected static String id;
protected static String name;
//JSON names
private static final String TAG_businessId              = "b_id";
private static final String TAG_businessName            = "businessName";
private static final String TAG_businessDescription     = "businessDescription";
private static final String TAG_businessLocation        = "businessLocation";
private static final String TAG_businessAddress         = "businessAddress";


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
super.onCreate(savedInstanceState); 
    Bundle bundle = new Bundle();
    bundle      = this.getArguments();
    SharedPreferences user_data = getActivity().getSharedPreferences("userData", 0);

    String bid = user_data.getString("BUSINESSROLEID", null);
    id          = bundle.getString("id");
    name    = bundle.getString("name");

    url     = "http://projects.gaditek.com/mobile/ihirsto/services/getBusiness.php?businessCategoryID="+id +"&businessRole="+bid;

    return inflater.inflate(R.layout.perx_list_detail, null, true);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            TextView t = (TextView) getView().findViewById(R.id.perx_list_heading);
            t.setText(name);
            datalist = new ArrayList<PerxDetailListModel>();
            listview = getListView();
            if(datalist.isEmpty()){
                new DownloadData().execute();
            }
            listview.setOnItemClickListener(new OnItemClickListener() 
            {
                @Override
                public void onItemClick(AdapterView<?> parent, View view,int position, long id) {


                    // Starting new intent
                    String venueName = datalist.get(position).getName().toString();
                    String desc = datalist.get(position).getDescription().toString();
                    String address = datalist.get(position).getAddress().toString();
                    String maplong = datalist.get(position).getlongitude().toString();
                    String maplat = datalist.get(position).getlatitude().toString();

                    Intent intent = new Intent(getActivity().getApplicationContext(), PerxDetailedActivity.class);


               intent.putExtra("heading", name);
                    intent.putExtra("venueName", venueName);
                    intent.putExtra("desc", desc);
                    intent.putExtra("address", address);
                    intent.putExtra("longitude", maplong);
                    intent.putExtra("latitude", maplat);

               startActivity(intent);



                }


            });

        }


        public void addFragment(Fragment fragment, boolean addToBackStack,int transition) 
        {   
            FragmentTransaction ft = getFragmentManager().beginTransaction();
            ft.replace(R.id.simple_fragment, fragment, null);
            ft.setTransition(transition);
            if (addToBackStack)
                ft.addToBackStack(null);
            ft.commit();
        }

//=============================

@SuppressLint("NewApi")
public class PerxDetailedActivity extends Activity{

    String headingName;String venueName;String desc ;String address;
    String latitude;String longitude;

      static LatLng HAMBURG;
      private GoogleMap map;

     @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.perx_detailed);
        Intent intent = new Intent();

         Bundle extras = getIntent().getExtras();

        headingName = extras.getString("heading");
        venueName   = extras.getString("venueName");
        desc        = extras.getString("desc");
        address     = extras.getString("address");
        longitude   = extras.getString("longitude");
        latitude    = extras.getString("latitude");
        Double longi = Double.parseDouble(longitude);
        Double lati = Double.parseDouble(latitude);
        HAMBURG =  new LatLng(lati, longi);


         map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();

         Marker hamburg = map.addMarker(new MarkerOptions().position(HAMBURG)
                    .title(venueName));


    // Move the camera instantly to hamburg with a zoom of 15.
        map.moveCamera(CameraUpdateFactory.newLatLngZoom(HAMBURG, 15));

        // Zoom in, animating the camera.
        map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);



    }

}

Log

06-01 18:26:16.546: E/AndroidRuntime(6549): FATAL EXCEPTION: main
06-01 18:26:16.546: E/AndroidRuntime(6549): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.gaditek.ihistro/com.gaditek.ihistro.PerxDetailedActivity}: android.view.InflateException: Binary XML file line #151: Error inflating class fragment
06-01 18:26:16.546: E/AndroidRuntime(6549):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1816)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1837)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at android.app.ActivityThread.access$1500(ActivityThread.java:132)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1033)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at android.os.Looper.loop(Looper.java:143)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at android.app.ActivityThread.main(ActivityThread.java:4196)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at java.lang.reflect.Method.invokeNative(Native Method)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at java.lang.reflect.Method.invoke(Method.java:507)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at dalvik.system.NativeStart.main(Native Method)
06-01 18:26:16.546: E/AndroidRuntime(6549): Caused by: android.view.InflateException: Binary XML file line #151: Error inflating class fragment
06-01 18:26:16.546: E/AndroidRuntime(6549):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:581)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:623)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:626)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at android.view.LayoutInflater.inflate(LayoutInflater.java:408)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:224)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at android.app.Activity.setContentView(Activity.java:1702)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at com.gaditek.ihistro.PerxDetailedActivity.onCreate(PerxDetailedActivity.java:40)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1780)
06-01 18:26:16.546: E/AndroidRuntime(6549):     ... 11 more
06-01 18:26:16.546: E/AndroidRuntime(6549): Caused by: java.lang.ClassNotFoundException: android.view.fragment in loader dalvik.system.PathClassLoader[/data/app/com.gaditek.ihistro-1.apk]
06-01 18:26:16.546: E/AndroidRuntime(6549):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at android.view.LayoutInflater.createView(LayoutInflater.java:471)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at android.view.LayoutInflater.onCreateView(LayoutInflater.java:549)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66)
06-01 18:26:16.546: E/AndroidRuntime(6549):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568)
06-01 18:26:16.546: E/AndroidRuntime(6549):     ... 21 more
mmBs
  • 8,421
  • 6
  • 38
  • 46
Furqan
  • 465
  • 6
  • 22

2 Answers2

3

Hello it's a compatibility error at :

E/AndroidRuntime(6549): Caused by: java.lang.ClassNotFoundException: android.view.fragment in loader dalvik.system.PathClassLoader[/data/app/com.gaditek.ihistro-1.apk] 06-01 18:26:16.546:

You'r trying to use Fragment in your code but to make Fragments works on Gingerbread and under, you have to import a compatibility library from Google : Look here for the Android Support Library and this Answer.

So make sure to turn your Activity into FragmentActivity and to use getSupportFragmentManager() instead of getFragmentManager()

 public void addFragment(Fragment fragment, boolean addToBackStack,int transition) 
        {   
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.replace(R.id.simple_fragment, fragment, null);
            ft.setTransition(transition);
            if (addToBackStack)
                ft.addToBackStack(null);
            ft.commit();
        }
Community
  • 1
  • 1
Glenn Sonna
  • 1,853
  • 3
  • 19
  • 25
  • I am facing issue on start activity .. i-e PerxDetailedActivity which contian another fragment of map v2 library – Furqan Jun 01 '13 at 14:48
  • Yeah it's normal, but the Error is not always located at the first line. You have to add the [Android Support Library](http://developer.android.com/tools/extras/support-library.html) to make your app works on Gingerbread. – Glenn Sonna Jun 01 '13 at 15:06
  • yes whole application is using fragments and is working fine except for this part .... when I need to open a new activity – Furqan Jun 01 '13 at 15:12
  • Update your post with Edited code (and the imports). Make sure to turn all your `Activiy` into `FragmentActivity` – Glenn Sonna Jun 01 '13 at 15:21
1

I just figured out stupid me the problem lies here

map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();

it should be

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

also as stated by @Glenn activity needs to be extended by FragmentActivity instead Activity .. hence resolved

Furqan
  • 465
  • 6
  • 22