

MovieList.java
public class MovieList extends AppCompatActivity {
ViewPager pager;
private AppBarConfiguration mAppBarConfiguration;
ListPagerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.movie_list);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
pager = findViewById(R.id.pager);
adapter = new ListPagerAdapter(getSupportFragmentManager());
adapter.addItem(createMovieListPage(1));
adapter.addItem(createMovieListPage(2));
adapter.addItem(createMovieListPage(3));
adapter.addItem(createMovieListPage(4));
pager.setAdapter(adapter);
pager.setOffscreenPageLimit(adapter.getCount()); // 페이지 개수 6개
DrawerLayout drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow)
.setDrawerLayout(drawer)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
}
// 우측상단 점세개 메뉴 만드는 화면인듯
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
// getMenuInflater().inflate(R.menu.movie_list, menu);
return true;
}
@Override
public boolean onSupportNavigateUp() {
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
return NavigationUI.navigateUp(navController, mAppBarConfiguration)
|| super.onSupportNavigateUp();
// return true;
}
// 뷰페이저 어댑터
class ListPagerAdapter extends FragmentStatePagerAdapter {
ArrayList<Fragment> items = new ArrayList<>();
public ListPagerAdapter(FragmentManager fm) {
super(fm);
}
public void addItem(Fragment item) {
items.add(item);
}
@NonNull
@Override
public Fragment getItem(int position) {
return items.get(position);
}
@Override
public int getCount() {
return items.size();
}
}
// 페이지 내용 설정할 데이터 보내기 -> MovieFragment.java
public MovieFragment createMovieListPage(int index) {
MovieFragment fragment = new MovieFragment();
Bundle bundle = new Bundle(); // 데이터 넣을 객체
bundle.putInt("size", adapter.getCount()); // 총 페이지 수 정보
bundle.putInt("index", index); // 페이지 번호만 넣기
fragment.setArguments(bundle); // 데이터 보내기
return fragment;
}
}
MovieFragment.java
public class MovieFragment extends Fragment {
TextView title; // 영화제목
TextView rv_rating; // 예매 비율
ImageView movie_post; // 영화 포스트
TypedArray typedArray; // 배경화면 배열을 받기위한 TyedArray 객체
Button detail_btn;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_movie, container, false);
movie_post = rootView.findViewById(R.id.movie_post);
title = rootView.findViewById(R.id.title);
rv_rating = rootView.findViewById(R.id.reserve_rating);
typedArray = getResources().obtainTypedArray(R.array.movie_background); // 배경화면 배열 참조
detail_btn = rootView.findViewById(R.id.view_detail);
String[] titleArr = getResources().getStringArray(R.array.movie_list); // 타이틀 배열 참조
String[] ratingArr = getResources().getStringArray(R.array.reserve_rating); // 예매율 배열 참조
Bundle bundle = getArguments(); // MovieList.java 에서 보낸 Bundle 받기
int pageSize = bundle.getInt("size"); // 총 페이지수 받기
int index = bundle.getInt("index"); // 해당 페이지 인덱스 받기
// 데이터 설정하기
for(int i=0; i<pageSize; i++) {
movie_post.setImageResource(typedArray.getResourceId(index-1,-1));
title.setText(index + ". " + titleArr[index-1]);
rv_rating.setText("예매율 " + ratingArr[index-1]);
}
detail_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), MainActivity.class);
startActivity(intent);
}
});
return rootView;
}
}
mobile_navigation.xml
<navigation
android:id="@+id/mobile_navigation"
app:startDestination="@+id/nav_home">
<fragment
android:id="@+id/nav_home"
android:name="com.example.bstcproject.MovieFragment"
android:label="@string/menu_movielist"
tools:layout="@layout/fragment_movie" />
<fragment
android:id="@+id/nav_gallery"
android:name="com.example.bstcproject.ui.gallery.GalleryFragment"
android:label="@string/menu_movieapi"
tools:layout="@layout/fragment_gallery" />
<fragment
android:id="@+id/nav_slideshow"
android:name="com.example.bstcproject.ui.slideshow.SlideshowFragment"
android:label="@string/menu_reservation"
tools:layout="@layout/fragment_slideshow" />
</navigation>
에러 내용(navigation graph인 mobile_navigation.xml 의 homefragment를 MovieFragment로 변경시)
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.os.Bundle.getInt(java.lang.String)' on a null object reference
at com.example.bstcproject.MovieFragment.onCreateView(MovieFragment.java:38)
MovieFragment.java의 getInt부분 에러