เมื่อใช้ 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 ภายใน) จะไม่สร้างไอคอนขึ้นใหม่เมื่อป้อนชิ้นส่วนเดียวกันเป็นครั้งที่สอง เพิ่งออกจากที่นี่เพื่อเมื่อคนอื่นสะดุดกับปัญหานี้เช่นกัน