탐색 드로어:시작할 때 선택한 항목을 어떻게 설정합니까?
내 코드는 완벽하게 작동합니다. 탐색 드로어에서 항목을 클릭할 때마다 항목이 선택됩니다.
물론 기본 조각(홈)으로 앱을 시작하고 싶지만, 탐색 드로어에 항목이 선택되어 있지 않습니다.프로그래밍 방식으로 해당 항목을 선택하려면 어떻게 해야 합니까?
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);
또는에서.onCreate
FragmentTransaction을 사용하여 앱을 시작할 때.
당신의 지원에 감사드립니다.
아래 코드를 사용합니다.
navigationView.getMenu().getItem(0).setChecked(true);
호출 후 이 메서드 호출setNavDrawer();
그getItem(int index)
메소드는 다음을 가져옵니다.MenuItem
그러면 당신은 전화할 수 있습니다.setChecked(true);
그 점에 관하여MenuItem
이제 기본 요소 인덱스에 포함된 요소 인덱스를 확인하고 0을 해당 인덱스로 바꾸기만 하면 됩니다.
전화로 품목을 선택(강조 표시)할 수 있습니다.
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);
아래의 @로 답변했습니다.
다음으로 전화할 수도 있습니다.
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));
예제(내비게이션 보기).탐색 항목에 있음선택한 수신기):
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
구글의 "오 정말 대단한" 지원 립에는 항상 문제가 있습니다.지원 libs 버전을 다운그레이드하지 않고 항목을 확인하려면 체크 가능으로 설정한 후 체크 가능 상태를 설정하십시오.
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));
위의 코드는 다음을 가정합니다.
- 은 구습니다를 했습니다.
NavigationView.OnNavigationItemSelectedListener
당신이 활동하는 동안에. - 이미 전화하셨습니다.
navigationView.setNavigationItemSelectedListener(this);
- 선택하려는 항목이 위치 0에 있습니다.
이를 위해 두 가지 기능을 호출해야 합니다.
첫 번째: 구현한 명령을 실행하기 위한 명령입니다.onNavigationItemSelected
수신기:
onNavigationItemSelected(navigationView.getMenu().getItem(R.id.nav_camera));
두 번째: 탐색 드로어 메뉴 항목의 상태를 선택(또는 선택)으로 변경하는 경우:
navigationView.setCheckedItem(R.id.nav_camera);
저는 두 가지 기능을 모두 호출했고 그것은 제게 효과가 있었습니다.
다음 코드는 메뉴 항목만 선택하게 합니다.
navigationView.setCheckedItem(id);
메뉴 항목을 선택하고 열려면 위 행 뒤에 다음 코드를 추가합니다.
onNavigationItemSelected(navigationView.getMenu().getItem(0));
가장 쉬운 방법은 다음과 같이 xml에서 선택하는 것입니다.
<menu>
<group android:checkableBehavior="single">
<item
android:checked="true"
android:id="@+id/nav_home"
android:icon="@drawable/nav_home"
android:title="@string/main_screen_title_home" />
선을 메모합니다.android:checked="true"
이것이 제 해결책입니다. 아주 간단합니다.
다음은 menu.xml 파일입니다.
<group
android:id="@+id/grp1"
android:checkableBehavior="single">
<item
android:id="@+id/nav_all_deals"
android:checked="true"
android:icon="@drawable/ic_all_deals"
android:title="@string/all_deals" />
<item
android:id="@+id/nav_news_and_events"
android:icon="@drawable/ic_news"
android:title="@string/news_and_events" />
<item
android:id="@+id/nav_histories"
android:icon="@drawable/ic_histories"
android:title="@string/histories" />
</group>
위의 메뉴는 첫 번째 메뉴 항목을 강조 표시합니다.아래 줄은 무언가를 할 것입니다(예: 첫 번째 조각 표시 등).참고: '드로어 코드 구성' 후에 기록합니다.
onNavigationItemSelected(mNavigationView.getMenu().getItem(0));
활동(서랍 뒤):
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar,
R.string.navigation_drawer_open,
R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
navigationView.setCheckedItem(R.id.nav_portfolio);
onNavigationItemSelected(navigationView.getMenu().getItem(0));
}
그리고.
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
Fragment fragment = null;
if (id == R.id.nav_test1) {
fragment = new Test1Fragment();
displaySelectedFragment(fragment);
} else if (id == R.id.nav_test2) {
fragment = new Test2Fragment();
displaySelectedFragment(fragment);
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
메뉴에서 확인할 수 있습니다.
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_test1"
android:title="@string/test1" />
<item
android:id="@+id/nav_test2"
android:title="@string/test2" />
</group>
첫 번째 메뉴가 강조 표시되고 기본 메뉴로 표시됩니다.
먼저 선택한 항목의 색상을 만듭니다.여기 https://stackoverflow.com/a/30594875/1462969 의 좋은 예가 있습니다.아이콘의 색상을 변경하는 데 도움이 됩니다.선택한 모든 항목의 배경을 변경하려면 values\style.xml 파일에 다음을 추가합니다.
<item name="selectableItemBackground">@drawable/selectable_item_background</item>
여기서 selectable_item_background는 drawable/selectable_item_background.xml로 선언해야 합니다.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/accent_translucent"
android:state_pressed="true" />
<item android:drawable="@android:color/transparent" />
</selector>
style.xml에서 색상을 선언할 수 있는 위치
<color name="accent_translucent">#80FFEB3B</color>
그리고 이 후에
// The main navigation menu with user-specific actions
mainNavigationMenu_ = (NavigationView) findViewById(R.id.main_drawer);
mainNavigationMenu_.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
mainNavigationMenu_.getMenu().findItem(itemId).setChecked(true);
return true;
}
});
보시다시피 이 메인 NavigationMenu_.getMenu().findItem(itemId)을 사용했습니다.setChecked(true); 선택한 항목을 설정합니다.여기 탐색 보기
<android.support.design.widget.NavigationView
android:id="@+id/main_drawer"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/header_main_navigation_menu"
app:itemIconTint="@color/state_list"
app:itemTextColor="@color/primary"
app:menu="@menu/main_menu_drawer"/>
사용 시BottomNavigationView
다음과 같은 다른 대답들navigationView.getMenu().getItem(0).setChecked(true);
그리고.navigationView.setCheckedItem(id);
작업 호출이 작동하지 않음:
BottomNavigationView bottomNavigationView = findViewById(R.id.bottom_navigation_view);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
// TODO: 10-Aug-19 your code here
}
});
bottomNavigationView.setSelectedItemId(R.id.myitem);
아래 코드는 첫 번째 항목을 선택하고 메뉴에서 선택한 첫 번째 항목을 강조 표시하는 데 사용됩니다.
onNavigationItemSelected(mNavigationView.getMenu().getItem(0).setChecked(true));
당신은 이걸 할 수 있다.nav_view.getMenu().findItem(R.id.menutem).setChecked(true)
package com.example.projectdesign;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.Fragment;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
import android.widget.Toast;
import com.google.android.material.navigation.NavigationView;
public class MenuDrawer extends AppCompatActivity implements
NavigationView.OnNavigationItemSelectedListener{
public DrawerLayout drawerLayout;
public ActionBarDrawerToggle actionBarDrawerToggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu_drawer);
drawerLayout = findViewById(R.id.my_drwaer_layout);
actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout,
R.string.nav_open, R.string.nav_close);
drawerLayout.addDrawerListener(actionBarDrawerToggle);
actionBarDrawerToggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
NavigationView navigationView = findViewById(R.id. nav_view ) ;
navigationView.setNavigationItemSelectedListener( this ) ;
}
@SuppressLint("ResourceType")
@SuppressWarnings ( "StatementWithEmptyBody" )
@Override
public boolean onNavigationItemSelected (MenuItem item){
int id=item.getItemId();
switch (id){
case R.id.nav_account:
Intent intent= new Intent(MenuDrawer.this, UsingBackKey.class);
startActivity(intent);
break;
case R.id.women:
getSupportFragmentManager().beginTransaction().replace(R.id.my_drwaer_layout,new
Fragment2()).commit();
break;
case R.id.men:
Toast.makeText(getApplicationContext(),"Soon",
Toast.LENGTH_SHORT).show();
break;
case R.id.kids:
Toast.makeText(getApplicationContext(),"Welcome to Kids",
Toast.LENGTH_SHORT).show();
break;
}
drawerLayout.closeDrawer(GravityCompat.START);
return super.onContextItemSelected(item);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if (actionBarDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
drawerLayout.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
super.onBackPressed();
}
}
탐색 드로어의 개별 항목을 선택합니다.
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/darkBlue" android:state_pressed="true"/>
<item android:drawable="@color/darkBlue" android:state_checked="true"/>
<item android:drawable="@color/textBlue" />
</selector>
탐색 보기에서 몇 가지 변경
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:itemBackground="@drawable/drawer_item"
android:background="@color/textBlue"
app:itemIconTint="@color/white"
app:itemTextColor="@color/white"
app:menu="@menu/activity_main_drawer"
/>
bottomNavigationView.setSelectedItemId(R.id.menuItem);
위는 나에게 효과가 있었지만, 나는 그것을 안에 배치했습니다.onResume()
방법.내부에 배치onNavigationItemSelected(@NonNull MenuItem item)
활동을 왔다 갔다 하면서 문제를 일으켰습니다.
private BottomNavigationView bottomNavigationView;
@Override
public void onResume(){
super.onResume();
bottomNavigationView.setSelectedItemId(R.id.menuItem);
}
어떤 이유에서인지 ID를 사용하여 MenuItem을 찾는 것이 좋습니다.
drawer.getMenu().findItem(R.id.action_something).setChecked(true);
언급URL : https://stackoverflow.com/questions/31233279/navigation-drawer-how-do-i-set-the-selected-item-at-startup
'sourcecode' 카테고리의 다른 글
Android;새 파일을 만들지 않고 파일이 있는지 확인 (0) | 2023.08.21 |
---|---|
앱스토어 밖에서 iOS 애플리케이션을 배포할 수 있는 방법이 있습니까? (0) | 2023.08.21 |
LINQ Any()와 동등한 PowerShell? (0) | 2023.08.21 |
MariaDB: 테이블 별칭을 사용하여 행을 삭제할 수 없습니다. (0) | 2023.08.21 |
새 인스턴스에서 PowerShell 시작 스크립트 (0) | 2023.08.21 |