2014-04-30 101 views
3

我作出了新聞應用,在那裏我有保存列表中的所有的新聞片段和具有視頻列表中的另一個片段。當你觸摸一個新的,它會調用名爲openNewsCont活性的方法,將與另一個替換當前的片段。安卓入門白屏片段交易

我遇到的proble是當我調用該方法,我得到了一個空白頁面,我已經看過很多其他的代碼,但我無法找到我的問題的解決方案。

下面是我從MainActivity.java

public void openNewsCont(String text) { 

    android.support.v4.app.FragmentManager fm = getSupportFragmentManager(); 
    android.support.v4.app.FragmentTransaction ft = fm.beginTransaction(); 
    ft.replace(R.id.pager, new NewsContent()); 
    ft.addToBackStack(null); 
    ft.commit(); 
    fm.executePendingTransactions(); 
} 

這裏調用的方法是保持的新聞和MainActivity.java調用該方法

package com.example.link_test; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.LinearLayout; 

    public class Tab1 extends Fragment { 

      public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) { 

       final View android = inflater.inflate(R.layout.tab1, container, false);    
       LinearLayout newLink = (LinearLayout) android.findViewById(R.id.news1); 
       newLink.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        String text = "Text from fragment"; 
        MainActivity ma = (MainActivity) getActivity(); 
        ma.openNewsCont(text); 
       } 
       }); 

       return android; 
    } 
} 

而這裏Tab1.java是應該被調用並顯示空白屏幕的片段NewsContent.java

package com.example.link_test; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class NewsContent extends Fragment { 
     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      View view = inflater.inflate(R.layout.news_content, container, false); 
      return view; 
    } 
} 

回答

0

One obvi對我而言,最重要的是你有ft.addToBackStack(null);兩次。很確定它應該只在那裏一次。

此外,我相信你需要ft.commit後直接調用fm.executePendingTransactions()()。

+0

是的我在編輯代碼時犯了這個錯誤,我添加了代碼,但是它仍然在加載一個空白頁。我不知道,這就好像實際上並沒有真正獲得我現在真正迷失的片段 – Tirlex

0

我的,因爲這是隻由我TabAdapter,但只適用於像新聞,韋迪等標籤所代表的片段需要消除對片段的V4支持解決了這個問題。來自未作爲標籤上進行管理,如NewsContent.java

碎片

這裏是如何我的方法來打開另一個片段從TAB1應該去過。

public void openNewsCont() { 

    NewsContent nc = new NewsContent(); 
    FragmentManager fm = getFragmentManager(); 
    FragmentTransaction ft = fm.beginTransaction(); 
    ft.replace(R.id.container, nc); 
    ft.addToBackStack(null); 
    ft.commit(); 
} 

這裏是NewsContent應該如何:

package com.example.link_test; 

    import android.app.Fragment; 
    import android.os.Bundle; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.ViewGroup; 

    public class NewsContent extends Fragment { 

     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     final View android = inflater.inflate(R.layout.news_content, container, false); 


     return android; 

     } 
    } 

感謝Eagle11爲他的努力幫助我,我花了整整一個上午來解決這個問題nooby。我希望這個答案能夠幫助像我這樣的新手。

1

替代片段:

Fragment feeddetailFragment = new FeedDetailFragment(); 
feedFragment.getFragmentManager().beginTransaction() 
.replace(R.id.frame_container, feeddetailFragment,Constant.FRAGMENT_FEEDDETAIL) 
.addToBackStack(null) 
.commit(); 

它會運行

如果仍然沒有工作,然後嘗試要在其中替換後展現片段檢查片段的觀點是否爲空或不

if (view != null) { 
     ViewGroup parent = (ViewGroup) view.getParent(); 
     if (parent != null) 
      parent.removeView(view); 
    } 
    try { 

     view = inflater.inflate(R.layout.fragment_business_details, 
       container, false); 

     initializeViewObjects(); 
     setListeners(); 

    } catch (InflateException e) { 

     return view; 
    } 

    return view; 
}