5

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 NavigationDrawerFragments. 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 FragmentActionBar 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:

  1. Tôi thậm chí không biết cách quản lý đúng các mục menu ActionBar. Mỗi Fragment 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ển Fragments bằng cách khai thác trên NavigationDrawer thay vì đi lại với Android lại key)
  2. StackBack nên được popped hoàn toàn khi lựa chọn một trong những NavigationDrawer tùy chọn . Tôi nghi ngờ các mặt hàng lộn xộn ActionBar 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 StackBackActionBar?

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.

Trả lời

0

Vâng, tôi nghĩ cách tốt nhất phụ thuộc vào nhu cầu ứng dụng. Xem xét 2 trường hợp

A-App có yêu cầu cho điều hướng thu thập thông tin & nhiều hoạt động với điều hướng lồng nhau/sâu. Cách tiếp cận tốt nhất là có một hoạt động cơ bản có framelayout và navigationdrawer. Tất cả các hoạt động mở rộng/kế thừa từ Hoạt động cơ bản này. Và đối với mỗi hoạt động thổi phồng bố cục tương ứng và thêm vào thùng chứa framelayout của baseActivity theo chương trình.
Điều hướng ngăn xếp trở lại dễ dàng hơn.

B - Ứng dụng có yêu cầu cho điều hướng thu thập thông tin & chỉ điều hướng một lớp. Sau đó, người ta có thể sử dụng khái niệm tự động thêm và thay thế các đoạn trên một Hoạt động có ngăn điều hướng.

0

http://developer.android.com/training/implementing-navigation/nav-drawer.html

Đây là hướng dẫn tôi sử dụng để học ngăn điều hướng. Tìm thấy nó khá hữu ích. Nó đi qua quá trình thiết lập ngăn kéo, liên kết nó với các biểu tượng và tải các mảnh lên trang.

+0

Đâ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