게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
안드로이드 네비게이션 드로어와 프레그먼트 순서에 대해 질문있습니다.
게시물ID : programmer_19571짧은주소 복사하기
작성자 : 지포군
추천 : 0
조회수 : 1675회
댓글수 : 2개
등록시간 : 2017/01/14 23:15:22
옵션
  • 본인삭제금지
현재 안드로이드 공부하고 있는 학생입니다.
다름이 아니라 네비게이션 드로어 클릭 이벤트를 사용해서 프레그먼트를 교체해주는것을 구현 하려고 하는데
지금 프레그먼트가 화면에 뜨면 네미게이션 드로어의 클릭 이벤트가 먹통이 되더라구요...

구글링을 해봤더니 네비게이션 드로어가 항상 최상위에 선언되어야지 클릭이벤트를 인식할 수 있다고 하더군요
혹시 다른 문제인가 해서 처음에 프레그먼트를 띄우지 않고 클릭으로 띄워 봤더니 되더라구요 ㅎㅎ 그래봤자 한번만 인식 되고
프레그먼트 나오고 부터는 다시 프레그먼트에 터치 이벤트가 막히는 현상이 계속 되었습니다...
그래서 이거에 대해 다시 구글링 해봤는데 아직까지 찾지 못하고 있습니다 ㅠㅠ

아래는 제 코드 입니다. 코드는 안드로이드 스튜디오에서 제공하는 네비게이션 액티비티를 수정해서 사용했습니다. 

1. 메인 엑티비티 OnCreate 부분
@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);
toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);

FragmentManager fm = getSupportFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.drawer_layout);
if(fragment==null){
fragment = new MonthCalendarFragment();
fm.beginTransaction().replace(R.id.drawer_layout,fragment).commit();
}

}

2. 메인 엑티비티 xml 부분
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
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:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">

<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />

<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:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer" />

</android.support.v4.widget.DrawerLayout>

3. 클릭 이벤트로 프레그먼트를 교체하는 부분

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
Fragment fragment = null;

// Handle navigation view item clicks here.
int id = item.getItemId();

switch (id){
case R.id.nav_camera:
fragment = new MonthCalendarFragment();
Log.d("ddd","MonthFragment");
break;
case R.id.nav_gallery:
fragment = new WeekCalendarFragment();
Log.d("ddd","WeekFragment");
break;
}

if(fragment!=null) {
Log.d("ddd","setfm");
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().replace(R.id.drawer_layout, fragment).commit();
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}







전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호