탐색 창 : 시작시 선택한 항목을 어떻게 설정합니까?
내 코드는 완벽하게 작동합니다. 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);
또는 onCreate
FragmentTransaction으로 앱 시작시.
당신의 지원에 감사드립니다.
아래 코드를 사용하십시오 :
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));
위의 코드는 다음을 가정합니다.
- 당신은
NavigationView.OnNavigationItemSelectedListener
당신의 활동에 구현 했습니다 - 이미 전화하셨습니다 :
navigationView.setNavigationItemSelectedListener(this);
- 선택하려는 항목이 위치 0에 있습니다.
이를 위해 2 개의 함수를 호출해야합니다.
먼저onNavigationItemSelected
리스너 에서 구현 한 명령을 실행하십시오 .
onNavigationItemSelected(navigationView.getMenu().getItem(R.id.nav_camera));
둘째 : 탐색 창 메뉴 항목의 상태를 선택 (또는 확인)으로 변경합니다.
navigationView.setCheckedItem(R.id.nav_camera);
나는 두 기능을 모두 호출했고 그것은 나를 위해 일했다.
다음 코드는 메뉴 항목 만 선택합니다.
navigationView.setCheckedItem(id);
메뉴 항목을 선택하고 열려면 위의 줄 뒤에 다음 코드를 추가하십시오.
onNavigationItemSelected(navigationView.getMenu().getItem(0));
이것은 내 솔루션이며 매우 간단합니다.
내 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));
가장 쉬운 방법은 다음과 같이 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"
우선 선택한 항목의 색상을 만듭니다. 여기 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;
}
});
보시 다시피이 mainNavigationMenu_.getMenu (). findItem (itemId) .setChecked (true); 선택한 항목을 설정합니다. 여기 navigationView
<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"/>
Nav Drawer의 개별 항목 선택기를 만듭니다.
<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>
NavigationView에서 몇 가지 사항을 변경하십시오.
<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"
/>
귀하의 활동 (서랍 뒤에) :
@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>
그래서 첫 번째 메뉴는 하이라이트 와 쇼 기본 메뉴로는.
전화 통화 와 BottomNavigationView
같은 다른 답변을 사용할 때 작동합니다.navigationView.getMenu().getItem(0).setChecked(true);
navigationView.setCheckedItem(id);
setSelectedItemId
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));
어떤 이유로 ID를 사용하여 MenuItem을 찾는 것이 좋습니다.
drawer.getMenu().findItem(R.id.action_something).setChecked(true);
'IT story' 카테고리의 다른 글
OR (||)과 같이 스위치에서 여러 사례를 테스트 (0) | 2020.04.26 |
---|---|
PHP Mail ()로 첨부 파일을 보내시겠습니까? (0) | 2020.04.26 |
Swift에서 NSLocalizedString은 무엇입니까? (0) | 2020.04.26 |
라 라벨 블레이드 템플릿에서 변수를 설정하는 방법 (0) | 2020.04.26 |
재귀 이해하기 (0) | 2020.04.26 |