2013-08-20 41 views
9

我環顧四周,發現了一些類似主題的問題,但沒有任何對我有幫助的問題。 我試圖使用getSupportFragmentManager()。findFragmentByTag(TAG)訪問現有的活動片段,但它始終返回null。類似問題的回覆表明,執行提交需要一段時間,因此如果調用過早,調用findFragmentByTag將返回null。我已經試過兩件事情:Android碎片 - findFragmentByTag總是返回null

  • 添加getSupportFragmentManager()executePendingTransactions()後
    立即提交,但仍得到
  • 添加了一個按鈕...在創建活動後按此按鈕, 已註冊的片段和顯示的視圖應該使 系統有足夠的時間提交。但我仍然得到null

這裏是我的活動:

public class MainActivity extends ActionBarActivity { 

private static final String F_SETTINGS = "f_settings"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    Button btn = (Button) findViewById(R.id.btn); 
    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      debug(); 
     } 
    }); 

    if (savedInstanceState == null) { 
     FSettings newFragment = new FSettings(); 
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     ft.replace(R.id.container, newFragment); 
     ft.addToBackStack(F_SETTINGS); 
     ft.commit(); 
     // getSupportFragmentManager().executePendingTransactions(); 
     //// Activating this did not make any difference... 
    } 

    debug(); 
} 

private void debug() { 
    String txt = "null"; 
    Fragment frag = getSupportFragmentManager().findFragmentByTag(F_SETTINGS); 
    if (frag != null) { 
     txt = frag.toString(); 
    } 
    Log.i("Testing", txt); 
} 

}

什麼我錯在這裏做什麼? 乾杯, 最大

+1

你確定savedInstanceState爲空嗎? – njzk2

+1

ft.addToBackStack(F_SETTINGS); <---這不會標記您的片段。 – bofredo

回答

20

在你的代碼並沒有提及在替代方法,所以
使用片段

ft.replace(R.id.container, newFragment,"fragment_tag_String"); 

的替代方法的這種結構請參閱此鏈接瞭解更多信息標籤。 fragment replace with tag name

+0

哦,親愛的,你不會相信我盯着代碼來弄清楚什麼是錯的......多虧了,現在就開始工作。 – maxdownunder

+0

請參閱我的相關問題:http://stackoverflow.com/questions/24833912/refresh-fragment-ui-from-fragmentactivity –

相關問題