6

Im работает с фрагментами и ..Приложение сбой при использовании фрагментов

У меня возникла проблема в моем коде, который я просто не могу найти.

Точки LogCat на этот кусок кода, в одном из своих фрагментов:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.activity_main, container, false); 
} 

Мой главный класса (FragmentActivity):

import android.app.Activity; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentTransaction; 
import android.view.View; 

public class Fragments extends FragmentActivity { 

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

     MainActivity fragment = new MainActivity(); 
     FragmentTransaction transaction = getSupportFragmentManager() 
       .beginTransaction(); 
     transaction.add(R.id.fragment_place, fragment); 
     transaction.commit(); 
    } 

    public void onSelectFragment(View view) { 

     Fragment newFragment; 

     if (view == findViewById(R.id.add)) { 
      newFragment = new Add(); 
     } else if (view == findViewById(R.id.map)) { 
      newFragment = new MainActivity(); 
     } else { 
      newFragment = new MainActivity(); 
     } 

     FragmentTransaction transaction = getSupportFragmentManager() 
       .beginTransaction(); 
     transaction.replace(R.id.fragment_place, newFragment); 
     transaction.addToBackStack(null); 
     transaction.commit(); 
    } 

} 

и LogCat:

09-30 00:02:52.363: E/AndroidRuntime(32284): FATAL EXCEPTION: main 
09-30 00:02:52.363: E/AndroidRuntime(32284): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.free/com.example.free.Fragments}: android.view.InflateException: Binary XML file line #8: Error inflating class fragment 
09-30 00:02:52.363: E/AndroidRuntime(32284): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2185) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2210) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at android.app.ActivityThread.access$600(ActivityThread.java:142) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1208) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at android.os.Handler.dispatchMessage(Handler.java:99) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at android.os.Looper.loop(Looper.java:137) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at android.app.ActivityThread.main(ActivityThread.java:4931) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at java.lang.reflect.Method.invokeNative(Native Method) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at java.lang.reflect.Method.invoke(Method.java:511) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at dalvik.system.NativeStart.main(Native Method) 
09-30 00:02:52.363: E/AndroidRuntime(32284): Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class fragment 
09-30 00:02:52.363: E/AndroidRuntime(32284): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at com.example.free.MainActivity.onCreateView(MainActivity.java:124) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1478) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:556) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1163) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at android.app.Activity.performStart(Activity.java:5018) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
09-30 00:02:52.363: E/AndroidRuntime(32284): ... 11 more 
09-30 00:02:52.363: E/AndroidRuntime(32284): Caused by: java.lang.ClassCastException: com.google.android.gms.maps.MapFragment cannot be cast to android.support.v4.app.Fragment 
09-30 00:02:52.363: E/AndroidRuntime(32284): at android.support.v4.app.Fragment.instantiate(Fragment.java:402) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at android.support.v4.app.Fragment.instantiate(Fragment.java:377) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:277) 
09-30 00:02:52.363: E/AndroidRuntime(32284): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:676) 
09-30 00:02:52.363: E/AndroidRuntime(32284): ... 24 more 

Класс «MainActivity» очень длинный, поэтому я вставил его с помощью pasebin:

http://pastebin.com/Lt3wbNzD

Благодарим за помощь!

Edit:

private GoogleMap map; 

FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); 
     transaction.add(R.id.map, map).commit(); 

он показывает ошибку:

The method add(int, Fragment) in the type FragmentTransaction is not applicable for the arguments (int, GoogleMap)

ответ

2
Caused by: java.lang.ClassCastException: com.google.android.gms.maps.MapFragment cannot be cast to android.support.v4.app.Fragment 

Вы не можете создать фрагмент внутри фрагмента, используя XML. Вы не разместили xml для фрагмента, но я предполагаю, что у вас есть фрагмент карты. Вы все еще можете добавить его, но вам нужно добавить его динамически, используя getChildFragmentManager()

+0

Да, вы правы. его карта. Можете ли вы помочь мне добавить его? Я понятия не имею, как использовать 'getSupportFragmentManager()' .. – NirPes

+0

Извините тип, означающий getChildFragmentManager(). Вот руководство: http://developer.android.com/about/versions/android-4.2.html#NestedFragments Очень просто, что вы сделали в своей фрагментации –

+0

У меня возникли проблемы, потому что карта - это GoogleMap, а не фрагмент , @RSenApps Ive отредактировал мой вопрос. помогите мне PLS. – NirPes

0

Вы должны использовать это

return inflater.inflate(R.layout.activity_main,null);

у Вас нет родителей, как это Fragment сделка ..

+0

Я пробовал это. все еще падает. – NirPes

1

С support library, вы должны использовать FrameLayout в xml в качестве владельца фрагмента вместо фрагмента следующим образом:

<FrameLayout android:id="@+id/fragment_place" ... /> 
+0

Пробовал, все еще падает. – NirPes

Смежные вопросы