看板 AndroidDev 關於我們 聯絡資訊
承之前的問題 http://www.ptt.cc/bbs/AndroidDev/M.1393480191.A.C00.html 之前的問題是解決了 不過冒出了第二個問題 現在的情況是,假設1裡面有1-1 = CategoryFragment, 1-2 = ListFragment 我現在的做法是 1是主Fragment,裡面會有ViewPager來放1-1 1-2 Layout <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent" /> Adpater程式碼片段 @Override public Fragment getItem(int position) { switch (position) { case 0: return new CategoryFragment(); case 1: return new ListFragment(); } return null; } 現在問題是: 我在 CategoryFragment 和 ListFragment 有各別設兩個不同的 Menu Resource 而 CategoryFragment 是最一開始進入的,但它一開始不會出現我設定的 MenuItem 但是 swipe 到 ListFragment ,MenuItem 有跑出來,這部分很正常沒問題 而再 swipe 回來 CategoryFagment ,不見的 MenuItem 就在這時候跑出來了 我想 CategoryFragment 和 ListFragment 的設定應該沒有問題 setHasOptionsMenu(true) 有設定 onCreateOptionsMenu() 有覆寫 而上層的 Fragment 我沒有覆寫 onCreateOptionsMenu 因為寫在上層的話,該 MenuItem 就會共用 我需求是兩個 Fragment 要出現不一樣的 MenuItem 感謝版上的神人解答<(_ _)> 註: Google 找資料是有看到 ActionBarSherlock 有遇到這個問題 但我並沒有使用 ActionBarSherlock 裡面提到的方法也不能使用,所以就沒參考了 補充: 後來有找到解決方法。 在網路上有看到其他人也有類似的問題 http://ppt.cc/mXMK http://ppt.cc/Ojkr 小弟英文弱弱看不懂,只知道這應該是 Android 的 bug 因為 API LEVEL 17 就沒有這個問題了 後來我是改成主 Fragment 設成 CategoryFragment 的 Menu 而 CategoryFragment 就不用設 Menu 但是設 onOptionsItemSelected 依然可以對應主 Fragment 的 Menu 的 其他 ListFragment 需要在 onCreateOptionsMenu 最前面加 menu.clear() 這樣就可以正常動作了,但不是很完美。 因為主 Fragment 和 CategoryFragment 就必需綁在一起使用了。 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.134.72.45 ※ 編輯: tails32100 來自: 220.134.72.45 (03/04 18:52)
tac0wu:解法似乎是說setCurrentItem 被呼叫太多次(在同一個index上 03/05 00:11
tac0wu:導致main thread的queue塞了太多東西 沒處理到一些跟menu有 03/05 00:12
tac0wu:關的重要事情 所以他給了兩個解法 都是在避免這種事情 03/05 00:13
tac0wu:發生 可惜我不是很清楚你怎麼寫的 只能幫到這樣 03/05 00:13
謝謝您的翻譯 <(_ _)> 我的程式碼並沒有呼叫到 setCurrentItem() 所以還是完全不知道怎麼回事 倒是用 debug 看過 在 CategoryFragment 裡的 onPrepareOptionsMenu 去觀察 Menu 裡面的確是有我在 CategoryFragment 加上去的 Menu 只是沒有在 Visible 的陣列裡。 我也試過用 Fragment#setMenuVisibility() ,但完全沒用 :( 總之問題已經解決 是說,做出來的效果跟iOS感覺還蠻像的...Orz.... ※ 編輯: tails32100 來自: 59.126.68.4 (03/05 00:29)
tac0wu:恭喜 03/05 00:35