5

Tôi đang cố phát triển một ứng dụng bằng mẫu ngăn Điều hướng của Android Studio. Vì vậy, tôi đã tạo một dự án mới bằng cách sử dụng mẫu này. Nhưng khi tôi chạy chương trình và nhấp vào một mục trình đơn, chế độ xem không thay đổi. Tôi đã tìm kiếm ở khắp mọi nơi trên internet, nhưng tôi không thấy làm thế nào tôi có thể xử lý này.Ngăn điều hướng studio Android có phân đoạn hoặc hoạt động

Đây là mã được cung cấp bởi Android Studio:

public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 

    int id = item.getItemId(); 

    if (id == R.id.nav_camara) { 


    } else if (id == R.id.nav_gallery) { 

    } else if (id == R.id.nav_slideshow) { 

    } else if (id == R.id.nav_manage) { 

    } else if (id == R.id.nav_share) { 

    } else if (id == R.id.nav_send) { 

    } 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 
} 

Những gì tôi muốn đạt được là để thay thế giao diện hiện tại với quan điểm thích hợp cho các mục trình đơn nhấp vào.

Phân đoạn có phải là cách tốt nhất để làm điều này hay tôi nên tạo hoạt động khác cho từng mục menu?

+0

bạn nên sử dụng phân đoạn vì dễ sử dụng ngăn điều hướng bên trong hoạt động. – GiapLee

Trả lời

17

Trong trường hợp của bạn, việc thêm phân đoạn sẽ là giải pháp tốt nhất.

tạo ra một đoạn BlankFragment.java

public class BlankFragment extends Fragment { 

    public BlankFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.fragment_blank, container, false); 
    } 

} 

và tạo fragment_black.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.above_inc.shyam.drawer.BlankFragment"> 

    <!-- TODO: Update blank fragment layout --> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:text="@string/hello_blank_fragment" /> 

</FrameLayout> 

nay thay thế phương pháp của bạn

public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 

    Fragment fragment = null; 
    if (id == R.id.nav_camera) { 
     // Handle the camera action 
     fragment = new BlankFragment(); 
    } else if (id == R.id.nav_gallery) { 

    } else if (id == R.id.nav_slideshow) { 

    } else if (id == R.id.nav_manage) { 

    } else if (id == R.id.nav_share) { 

    } else if (id == R.id.nav_send) { 

    } 

    if (fragment != null) { 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     fragmentManager.beginTransaction() 
       .replace(R.id.frame_container, fragment).commit(); 

    } 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 

} 

thêm bên dưới mã trong content_main.xml bạn

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="com.above_inc.shyam.drawer.MainActivity" 
    tools:showIn="@layout/app_bar_main"> 


    <FrameLayout 
     android:id="@+id/frame_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     /> 
</RelativeLayout> 

bạn cũng có thể thêm phân đoạn khác vào các tùy chọn khác giống như máy ảnh ở mã trên

+0

Giải pháp này hoạt động @DHAKAD. – Royken

2

Phân đoạn sẽ là cách tốt nhất nếu bạn muốn ngăn điều hướng được hiển thị trên màn hình tiếp theo khi bạn bấm vào mục menu.

Nếu bạn sẽ sử dụng hoạt động, ngăn điều hướng sẽ không được hiển thị trừ khi bạn tạo BaseActivity mở rộng Ngăn điều hướng và sử dụng ở mọi nơi. Trong trường hợp này, bạn phải thay đổi hoạt ảnh chuyển tiếp acitivty vì hoạt động mới sẽ bật lên sau khi nhấp vào menu có thể trông kỳ lạ.

0

Nhấp chuột phải vào dự án của bạn -> Mới -> Phân đoạn.

Chỉnh sửa trường hợp chuyển đổi tương ứng.

0

@Passiondroid'sanswer chỉ sử dụng Phân đoạn nếu bạn muốn Ngăn điều hướng trên tất cả các hoạt động được bật.

Về bắt đầu một hoạt động trên nhấp vào mục menu, trong một trong những ứng dụng của tôi, tôi làm theo điều này,

public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 

     switch(id) 
     { 

      case R.id.nav_profile: 
      selection = 1; 
       intent = new Intent("android.intent.action.WEB"); 
       intent.putExtra("selection",selection); 
       startActivity(intent); 
       break; 
      case R.id.nav_books: 
       intent = new Intent("android.intent.action.WEBD"); 
       selection = 2; 
       intent.putExtra("selection",selection); 
       startActivity(intent); 
       break; 
      case R.id.fav_quotes: 
       intent = new Intent ("android.intent.action.SHOWFAVTES"); 
       selection = 3; 
       intent.putExtra("selection",selection); 
       startActivity(intent); 
       break; 
      default: 
       break; 
     } 

Để thay đổi và cấu hình Menu Item, bạn có thể tìm thấy những "activity_main_drawer.xml" dưới res-> Menu.

Và khi nhấp vào từng mục trong menu, bạn có thể bắt đầu hoạt động theo mong muốn của mình. Bạn đã khai báo các hoạt động trong tệp AndroidManifest.xml của bạn trước khi bạn sử dụng nó.

Các vấn đề liên quan