2014-05-01 68 views
0

所以我最近開始使用片段,並試圖瞭解如何工作。我把它放在一起,但我的應用程序不斷崩潰。任何關於正在發生的事情的提示都將不勝感激,同時也解釋了爲什麼會很好。我正試圖加載一個片段,加載在一個由ListView適配器交給我的視圖中的YouTube視頻。這裏是我的設置:片段替換/添加導致IllegalStateException

我已成立了一個YouTube視頻片段:

public class PlayerYouTubeFrag extends YouTubePlayerSupportFragment { 

private String currentVideoID = "Adp1TUDRNtc"; 
private YouTubePlayer activePlayer; 

public static PlayerYouTubeFrag newInstance(String url) { 

PlayerYouTubeFrag playerYouTubeFrag = new PlayerYouTubeFrag(); 

    Bundle bundle = new Bundle(); 
    bundle.putString("url", url); 

    playerYouTubeFrag.setArguments(bundle); 

    return playerYouTubeFrag; 
} 

private void init() { 

    initialize("AIzaSyCQxLWF1j0XFwKmros9w4Y5XSk1hqpEg6Q", new OnInitializedListener() { 

     @Override 
     public void onInitializationFailure(Provider arg0, YouTubeInitializationResult arg1) { } 

     @Override 
     public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean wasRestored) { 
      activePlayer = player; 
      activePlayer.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT); 
      if (!wasRestored) { 
       activePlayer.loadVideo(getArguments().getString("url"), 0); 

      } 
     } 
    }); 
} 
} 

現在我也有一個類,樹立片段和交換:

public class Youtube extends FragmentActivity{ 
public static final String API_KEY = "MyKey"; 
public static final String VIDEO_ID = "videoID"; 
public YouTubePlayerView youTubePlayerView; 

public Youtube(View view) { 

    //issue here!!! 
    PlayerYouTubeFrag myFragment = PlayerYouTubeFrag.newInstance("Adp1TUDRNtc"); 
    getSupportFragmentManager().beginTransaction().replace(view.findViewById(R.id.placeholder).getId(), myFragment).commit(); 
} 

末但並非最不重要我的xml:

<FrameLayout 
    android:id="@+id/placeholder" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent"> 
    </FrameLayout> 

的logcat的:

05-01 15:40:42.439: E/AndroidRuntime(24550): FATAL EXCEPTION: main 
05-01 15:40:42.439: E/AndroidRuntime(24550): Process: com.elmehalawi.hamra, PID: 24550 
05-01 15:40:42.439: E/AndroidRuntime(24550): java.lang.IllegalStateException: Activity has been destroyed 
05-01 15:40:42.439: E/AndroidRuntime(24550): at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1365) 
05-01 15:40:42.439: E/AndroidRuntime(24550): at and roid.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595) 
05-01 15:40:42.439: E/AndroidRuntime(24550): at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574) 
05-01 15:40:42.439: E/AndroidRuntime(24550): at com.elmehalawi.hamra.cards.Youtube.<init>(Youtube.java:31) 
05-01 15:40:42.439: E/AndroidRuntime(24550): at com.elmehalawi.hamra.cards.YoutubeCard.setupInnerViewElements(YoutubeCard.java:23) 
05-01 15:40:42.439: E/AndroidRuntime(24550): at it.gmariotti.cardslib.library.internal.Card.getInnerView(Card.java:250) 
05-01 15:40:42.439: E/AndroidRuntime(24550): at it.gmariotti.cardslib.library.view.CardView.setupMainView(CardView.java:364) 
05-01 15:40:42.439: E/AndroidRuntime(24550): at it.gmariotti.cardslib.library.view.CardView.buildUI(CardView.java:270) 
05-01 15:40:42.439: E/AndroidRuntime(24550): at it.gmariotti.cardslib.library.view.CardView.setCard(CardView.java:230) 
05-01 15:40:42.439: E/AndroidRuntime(24550): at com.elmehalawi.hamra.FeedAdapter.getView(FeedAdapter.java:96) 
05-01 15:40:42.439: E/AndroidRuntime(24550): at android.widget.AbsListView.obtainView(AbsListView.java:2263) 
05-01 15:40:42.439: E/AndroidRuntime(24550): at android.widget.ListView.measureHeightOfChildren(ListView.java:1263) 
05-01 15:40:42.439: E/AndroidRuntime(24550): at android.widget.ListView.onMeasure(ListView.java:1175) 
05-01 15:40:42.439: E/AndroidRuntime(24550): at android.view.View.measure(View.java:16497) 
05-01 15:40:42.439: E/AndroidRuntime(24550): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
+0

讓我們看看logcat。 – KingBryan

+0

那裏,讓我知道如果你需要更多;) – Osman

回答

3

您不應該在Activity的構造函數中進行任何初始化(特別是不是Fragment事務)。初始化應在onCreate

public class Youtube extends FragmentActivity { 
    public static final String API_KEY = "MyKey"; 
    public static final String VIDEO_ID = "videoID"; 
    public YouTubePlayerView youTubePlayerView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     PlayerYouTubeFrag myFragment = PlayerYouTubeFrag.newInstance("Adp1TUDRNtc"); 
     getSupportFragmentManager().beginTransaction().replace(view.findViewById(R.id.placeholder).getId(), myFragment).commit(); 
    } 
} 
+0

謝謝,它得到它的工作,現在我需要弄清楚如何訪問該特定視圖,因爲這是我的適配器交給我。 – Osman

0

你有Youtube extends FragmentActivity發生,你在setupInnerViewElements()實例化活動與new。千萬不要用new實例化活動。如果您需要實例化活動,請使用Intent

另外,您不能擁有一個需要參數的活動構造函數 - 框架需要查找並調用無參數構造函數。通常它是隱含的,即你根本沒有定義構造函數。將您的活動設置代碼放入onCreate()

1

只需更換onCreate() method of your activity中的片段即可。也不要像現在創建的那樣創建任何構造函數。

寫下你的代碼片段,並替換Activities onCreate() method

此外,只是通過你使用這樣的FrameLayout的ID。

PlayerYouTubeFrag myFragment = PlayerYouTubeFrag.newInstance("Adp1TUDRNtc"); 
    getSupportFragmentManager().beginTransaction().replace(R.id.placeholder, myFragment).commit(); 
相關問題