Mặc dù tôi đã làm việc với Android trong nhiều năm, đây là lần đầu tiên tôi sử dụng Fragments
trong một dự án thực tế. Vì vậy, tôi hơi bối rối :-PĐây có phải là cách sử dụng đúng các Mảnh vỡ Android và NavigationDrawer không?
Ứng dụng này có NavigationDrawer
với 4 phần chính. Tôi chỉ đang sử dụng một chính Activity
với một số Layout
có nội dung View
mà tôi thay thế bằng Fragments
. Khi một tùy chọn trong số NavigationDrawer
được chọn, tôi khởi tạo Fragment
và đặt nó vào nội dung đó View
. Tôi đang làm một cái gì đó như thế này:
private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectItem(position);
}
}
public static int drawerSelectedOption = 0;
private void selectItem(int position) {
drawerSelectedOption = position;
Fragment fragment = null;
switch (position) {
case 0:
fragment = new StoresFragment();
break;
case 1:
//promos
case 2:
fragment = new TransactionsFragment();
break;
case 3:
break;
case 4:
fragment = new Settings();
break;
}
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
setTitle(mSectionTitles[position]);
mDrawerLayout.closeDrawer(mDrawerList);
}
More Fragments
được đẩy từ bên trong mỗi một trong những chính NavigationDrawer
Fragments
. Vì vậy, mỗi một trong những 'màn hình' chính có một số màn hình phụ bên trong như hình dưới đây.
Drawer __ Fragment 1.0 -- Fragment 1.1 -- Fragment 1.2
|__ Fragment 2.0 -- Fragment 2.1 -- Fragment 2.2
Tôi đẩy những nội Fragments
từ trước Fragment
ActionBar
menu như thế này:
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
OrderCreateFragment fragment = new OrderCreateFragment();
fragmentTransaction.add(R.id.content_frame, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
Tôi đang phải đối mặt với một số vấn đề và đó là lý do tại sao tôi đang tìm kiếm một số lời khuyên về cách tiếp cận này:
- Tôi thậm chí không biết cách quản lý đúng các mục menu
ActionBar
. MỗiFragment
có menu riêng của mình và đôi khi họ bị mắc kẹt trong quán bar (ví dụ. Nếu chuyểnFragments
bằng cách khai thác trênNavigationDrawer
thay vì đi lại với Android lại key) StackBack
nên được popped hoàn toàn khi lựa chọn một trong nhữngNavigationDrawer
tùy chọn . Tôi nghi ngờ các mặt hàng lộn xộnActionBar
có liên quan đến điều này bởi vìFragments
được giữ trong ngăn xếp bằng cách nào đó.
Vì vậy, có thể bất cứ ai xin vui lòng tư vấn cho dù đây là một cách tiếp cận phù hợp và làm thế nào để giải quyết các vấn đề với StackBack
và ActionBar
?
CẬP NHẬT: Dường như xóa toàn bộ ngăn xếp trên phương thức selectItem đã giải quyết được 2 vấn đề chính. Mặc dù tôi vẫn muốn nghe ý kiến về cách tiếp cận này.
Đây là hướng dẫn tương tự mà tôi thực sự đã theo dõi. Trong khi nó hoạt động tốt cho ví dụ đơn giản, tôi nghĩ rằng đó là một cách tiếp cận rất sai cho các dự án lớn hơn (nghĩa là có 1 hoạt động và tất cả các mảnh được thêm vào/thay thế từ đó và có nhiều cấp độ trong mỗi tùy chọn ngăn điều hướng) . Tôi sẽ không bao giờ làm theo ví dụ đó một lần nữa, bạn không thể tưởng tượng có bao nhiêu vấn đề và cách giải quyết hacky tôi cần phải làm để làm cho các ứng dụng hoạt động đúng :-( – momo