เมื่อใช้ Navigation Drawer ผู้พัฒนา Android จะแนะนำให้ใช้ใน ActionBar "เฉพาะหน้าจอที่แสดงใน Navigation Drawer เท่านั้นที่ควรมีภาพ Navigation Drawer" และ "หน้าจออื่น ๆ ทั้งหมดมีกะรัตดั้งเดิม"
ดูที่นี่สำหรับรายละเอียด: http://youtu.be/F5COhlbpIbY
ฉันใช้กิจกรรมเดียวเพื่อควบคุมเศษชิ้นส่วนหลายระดับและสามารถใช้อิมเมจลิ้นชักนำทางเพื่อแสดงและใช้งานได้ในทุกระดับ
เมื่อสร้างชิ้นส่วนระดับต่ำกว่าฉันสามารถเรียกใช้ActionBarDrawerToggle
setDrawerIndicatorEnabled(false)
เพื่อซ่อนภาพลิ้นชักการนำทางและแสดงคาเร็ตขึ้น
LowerLevelFragment lowFrag = new LowerLevelFragment();
//disable the toggle menu and show up carat
theDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportFragmentManager().beginTransaction().replace(R.id.frag_layout,
lowFrag, "lowerFrag").addToBackStack(null).commit();
ปัญหาที่ฉันมีคือเมื่อฉันนำทางกลับไปที่ชิ้นส่วนระดับบนสุดขึ้นกะรัตยังคงแสดงแทนภาพลิ้นชักการนำทางเดิม คำแนะนำใด ๆ เกี่ยวกับวิธี "รีเฟรช" ActionBar ในแฟรกเมนต์ระดับบนสุดเพื่อแสดงอิมเมจลิ้นชักการนำทางอีกครั้ง?
สารละลาย
ข้อเสนอแนะของทอมทำงานให้ฉัน นี่คือสิ่งที่ฉันทำ:
กิจกรรมหลัก
กิจกรรมนี้ควบคุมชิ้นส่วนทั้งหมดในแอป
เมื่อเตรียมชิ้นส่วนใหม่เพื่อแทนที่ชิ้นส่วนอื่นฉันตั้งค่า drawerToggle setDrawerIndicatorEnabled(false)
ดังนี้:
LowerLevelFragment lowFrag = new LowerLevelFragment();
//disable the toggle menu and show up carat
theDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportFragmentManager().beginTransaction().replace(R.id.frag_layout,
lowFrag).addToBackStack(null).commit();
ถัดไปในการแทนที่onBackPressed
ฉันจะย้อนกลับด้านบนโดยการตั้งค่า drawerToggle เป็นsetDrawerIndicatorEnabled(true)
ดังนี้:
@Override
public void onBackPressed() {
super.onBackPressed();
// turn on the Navigation Drawer image;
// this is called in the LowerLevelFragments
setDrawerIndicatorEnabled(true)
}
ใน LowerLevelFragments
ในส่วนที่ฉันแก้ไขonCreate
และonOptionsItemSelected
เช่นนี้:
กำลังonCreate
เพิ่มsetHasOptionsMenu(true)
เพื่อเปิดใช้งานการกำหนดค่าเมนูตัวเลือก ตั้งค่าsetDisplayHomeAsUpEnabled(true)
ให้เปิดใช้งาน<ใน actionbar ด้วย:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// needed to indicate that the fragment would
// like to add items to the Options Menu
setHasOptionsMenu(true);
// update the actionbar to show the up carat/affordance
getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
}
จากนั้นonOptionsItemSelected
เมื่อใดก็ตามที่มีการกด<มันจะเรียกonBackPressed()
จากกิจกรรมเพื่อเลื่อนขึ้นหนึ่งระดับในลำดับชั้นและแสดงภาพการนำทางลิ้นชัก:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Get item selected and deal with it
switch (item.getItemId()) {
case android.R.id.home:
//called when the up affordance/carat in actionbar is pressed
getActivity().onBackPressed();
return true;
…
}
.replace(R.id.frag_layout
. หากนี่คือระดับลำดับชั้นที่มากกว่าหนึ่งฉันคาดหวังให้คุณ.add
ไปที่ backstack
theDrawerToggle.setDrawerIndicatorEnabled(false);
ส่วนในอย่างไร ฉันคิดว่ามันถูกประกาศในไฟล์คลาสกิจกรรมหลัก ฉันหาวิธีอ้างอิงนี้ไม่ได้ คำใบ้ใด ๆ
setDisplayOptions()
วิธีการภายในToolbarWidgetWrapper
(ของแพคเกจ android.support.v7.internal.widget ภายใน) จะไม่สร้างไอคอนขึ้นใหม่เมื่อป้อนชิ้นส่วนเดียวกันเป็นครั้งที่สอง เพิ่งออกจากที่นี่เพื่อเมื่อคนอื่นสะดุดกับปัญหานี้เช่นกัน