0
如果我加入片段到我的活動是這樣的:getSupportFragmentManager()findFragmentByTag不可預知的行爲
fragment_tags = new ArrayList<String>();
fragment_tags.add("user_fragment");
fragment_tags.add("memorial_fragment");
UserFragment user = new UserFragment();
MemorialFragment memorial = new MemorialFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.content_frame, user, fragment_tags.get(0));
ft.add(R.id.content_frame, memorial, fragment_tags.get(1));
ft.commit();
,然後過一段時間後,我試圖檢索這些片段是這樣的:
List<Fragment> frg = getSupportFragmentManager().getFragments();
Fragment fragUser = getSupportFragmentManager().findFragmentByTag(
"user_fragment");
Fragment fragUserID = getSupportFragmentManager().findFragmentById(
R.id.user_fragment_id);
Log.d("MV", "fragments size:" + (frg == null ? " null" : frg.size()));
Log.d將始終返回2的大小,但fragUser有時爲空,有時它是我放入事務的片段。
哪個更有趣的是,這段代碼:
try {
Log.d("MV", "0:" + frg.get(0).toString());
Log.d("MV", "1:" + frg.get(1).toString());
} catch (NullPointerException e) {
Log.d("MV", "null caught");
}
有時兩個片段工作,有時僅僅爲第一,如果我這樣做smething這樣的:
if(frg.get(0) == fragUser)
這將是有時評估爲真實,但並不經常..我不太瞭解這種行爲,但我需要實現多個片段之間的切換,所以我需要獲得對確切片段的引用。任何人?我試圖解決這個問題6個小時,我真的不知道如何做到這一點。謝謝
那麼回答一部分...... **「if(frg.get(0)== fragUser)」** ...你不能使用'=='比較對象。你需要使用'if(frg.get(0))。equals(fragUser))' – Squonk
Squonk實際上這是我的意圖..我不在乎對象是否具有相同的屬性,但如果它們的引用是相同的,它們必須是相同的對象..我想要相同的片段。 – vanomart