탐색 창 : 시작시 선택한 항목을 어떻게 설정합니까? //Setting Navigation View Item

내 코드는 완벽하게 작동합니다. Navigation Drawer의 항목을 클릭 할 때마다 항목이 선택됩니다.

물론 기본 조각 (홈)으로 앱을 시작하고 싶지만 탐색 창에는 항목이 선택되어 있지 않습니다. 프로그래밍 방식으로 해당 항목을 선택하려면 어떻게해야합니까?

public class BaseApp extends AppCompatActivity {

    //Defining Variables
    protected String LOGTAG = "LOGDEBUG";
    protected Toolbar toolbar;
    protected NavigationView navigationView;
    protected DrawerLayout drawerLayout;

    private DateManager db = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.base_layout);

        navigationView = (NavigationView) findViewById(R.id.navigation_view);


        // set the home/dashboard at startup

        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.frame, new DashboardFragment());
        fragmentTransaction.commit();

        setNavDrawer();
    }

    private void setNavDrawer(){

        // Initializing Toolbar and setting it as the actionbar
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        //Initializing NavigationView

        //Setting Navigation View Item Selected Listener to handle the item click of the navigation menu
        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {

            // This method will trigger on item Click of navigation menu
            @Override
            public boolean onNavigationItemSelected(MenuItem menuItem) {


                //Checking if the item is in checked state or not, if not make it in checked state

                // I THINK THAT I NEED EDIT HERE...

                if (menuItem.isChecked()) menuItem.setChecked(false);
                else menuItem.setChecked(true);

                //Closing drawer on item click
                drawerLayout.closeDrawers();


                //Check to see which item was being clicked and perform appropriate action
                switch (menuItem.getItemId()) {

                    //Replacing the main content with ContentFragment 

                    case R.id.home:

                        DashboardFragment dashboardFragment = new DashboardFragment();
                        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
                        fragmentTransaction.replace(R.id.frame, dashboardFragment,"DASHBOARD_FRAGMENT");
                        fragmentTransaction.commit();
                        return true;
[...]

여기에서 편집해야한다고 생각합니다.

if (menuItem.isChecked()) menuItem.setChecked(false);
                    else menuItem.setChecked(true);

또는 onCreateFragmentTransaction으로 앱 시작시.

당신의 지원에 감사드립니다.



답변

아래 코드를 사용하십시오 :

navigationView.getMenu().getItem(0).setChecked(true);

전화 한 후이 메소드를 호출하십시오. setNavDrawer();

getItem(int index)메소드는 on을 MenuItem호출 할 수 있으며, 기본적으로 가지고있는 요소 인덱스를 찾아 0을 해당 인덱스로 바꾸는 것입니다.setChecked(true);MenuItem

전화로 항목을 선택 (강조 표시) 할 수 있습니다

onNavigationItemSelected(navigationView.getMenu().getItem(0));

참조 링크는 다음과 같습니다. http://thegeekyland.blogspot.com/2015/11/navigation-drawer-how-set-selected-item.html

편집
nexus 4에서 작동하지 않았으며 라이브러리 개정 24.0.0을 지원합니다. 나는 사용을 추천합니다

navigationView.setCheckedItem(R.id.nav_item);

아래 @kingston에 의해 답변되었습니다.


답변

당신은 또한 전화 할 수 있습니다 :

navigationView.setCheckedItem(id);

이 방법은 API 23.0.0에서 도입되었습니다

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:tools="http://schemas.android.com/tools"
      tools:ignore="UnusedIds">

    <group
        android:id="@+id/group"
        android:checkableBehavior="single">
        <item
            android:id="@+id/menu_nav_home"
            android:icon="@drawable/ic_home_black_24dp"
            android:title="@string/menu_nav_home" />
    </group>
</menu>

노트 : android:checkableBehavior="single"

참조


답변

나 에게이 두 가지 방법이 효과가 없었습니다.

  • navigationView.getMenu().getItem(0).setChecked(true);
  • navigationView.setCheckedItem(id);

이것을 시도하십시오, 그것은 나를 위해 작동합니다.

onNavigationItemSelected(navigationView.getMenu().findItem(R.id.nav_profile));


답변

예 ( NavigationView.OnNavigationItemSelectedListener ) :

private void setFirstItemNavigationView() {
        navigationView.setCheckedItem(R.id.custom_id);
        navigationView.getMenu().performIdentifierAction(R.id.custom_id, 0);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setFirstItemNavigationView();
}

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    FragmentManager fragmentManager = getFragmentManager();

    switch (item.getItemId()) {
        case R.id.custom_id:
            Fragment frag = new CustomFragment();

            // update the main content by replacing fragments
            fragmentManager.beginTransaction()
                    .replace(R.id.viewholder_container, frag)
                    .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
                    .addToBackStack(null)
                    .commit();
            break;
    }

Tks


답변

Google의 “아주 너무 좋아”지원 라이브러리에는 항상 문제가 있습니다. 지원 라이브러리 버전을 다운 그레이드하지 않고 항목을 확인하려면 확인 상태를 설정하기 전에 확인 가능을 설정하십시오.

MenuItem item = drawer.getMenu().findItem(R.id.action_something);
item.setCheckable(true);
item.setChecked(true);

메뉴 xml 파일에서 확인 가능을 설정하면 작동 할 수도 있습니다


답변

다음 1- 라이너로 항목을 강조 표시하고 선택할 수 있습니다.

navigationView.getMenu().performIdentifierAction(R.id.posts, 0);

출처 : https://stackoverflow.com/a/31044917/383761


답변

API 23은 다음과 같은 방법을 제공합니다.

navigationView.setCheckedItem(R.id.nav_item_id);

그러나 어떤 이유로이 기능으로 인해 탐색 항목 뒤의 코드가 실행되지 않았습니다. 이 방법은 내비게이션 드로어에서 항목을 강조 표시하거나 ‘확인’하지만 OnNavigationItemSelectedListener시작 화면이 내비게이션 드로어 선택에 의존하는 경우 시작시 빈 화면을 표시 하지 않는 것 같습니다 . 리스너를 수동으로 호출 할 수 있지만 해키처럼 보입니다.

if (savedInstanceState == null) this.onNavigationItemSelected(navigationView.getMenu().getItem(0));

위의 코드는 다음을 가정합니다.

  1. 당신은 NavigationView.OnNavigationItemSelectedListener당신의 활동에 구현
    했습니다
  2. 이미 전화하셨습니다 :
    navigationView.setNavigationItemSelectedListener(this);
  3. 선택하려는 항목이 위치 0에 있습니다.