前提・実現したいこと
まだandroid開発を始めたばかりで至らないところもあると思いますが
回答よろしくお願いいたします。
現在表示しているviewpagerの番号を取得して
その番号をFragmentに渡したい。
なおそのviewpagerの番号によって
値を渡すFragmentを変えたい。
例)タブ1を選択しているときにページ番号1を取得して
そのページ番号をFragment1に渡す。
タブ2を選択しているときページ番号2を取得して
そのページ番号をFragment2に渡す。
発生している問題・エラーメッセージ
FragmentのgetArguments()でnullが出ており そこでアプリが落ちる。 nyusyutsuko_fragmentの String index = getArguments().getString("kbn"); [logcat] java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.BaseBundle.getString(java.lang.String)' on a null object reference at acom.example.a104_flag.nyusyutsuko_Fragment$2.onClick(nyusyutsuko_Fragment.java:120) //120はString index = getArguments().getString("kbn");のところになります。
該当のソースコード(nyusyutuko.home [activity])
ViewPager pager = findViewById(R.id.pager); pager.setAdapter( new PageAdapter(getSupportFragmentManager())); TabLayout tabs = findViewById(R.id.tabs); tabs.setupWithViewPager(pager); Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); pager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageScrollStateChanged(int state) { ViewPager pager = findViewById(R.id.pager); Bundle args = new Bundle(); int kbn_No = 0 ; if(state == ViewPager.SCROLL_STATE_SETTLING) { int page = pager.getCurrentItem(); if(page == 1){ FragmentManager fm = getFragmentManager(); FragmentTransaction t = fm.beginTransaction(); args.putInt("kbn", 1); nyusyutsuko_Fragment fragment = new nyusyutsuko_Fragment(); fragment.setArguments(args); }else if(page == 2){ FragmentManager fm = getFragmentManager(); FragmentTransaction t = fm.beginTransaction(); nyusyutsuko_Tab2_Fragment fragInfo = new nyusyutsuko_Tab2_Fragment(); args.putInt("kbn", 2); fragInfo.setArguments(args); } } }); }
該当のソースコード(nyusyutsuko_Fragment)
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { Button searchBtn = (Button)v.findViewById(R.id.button_search); searchBtn.setOnClickListener(new OnClickListener() { @RequiresApi(api = Build.VERSION_CODES.KITKAT) @Override public void onClick(View v) { String index = getArguments().getString("kbn"); String kbn_No = index; } } }
該当のソースコード(nyusyutsuko_tab2_Fragment)
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { Button searchBtn = (Button)v.findViewById(R.id.button_search); searchBtn.setOnClickListener(new OnClickListener() { @RequiresApi(api = Build.VERSION_CODES.KITKAT) @Override public void onClick(View v) { String index = getArguments().getString("kbn"); String kbn_No = index; } } }
試したこと
デバックではFragmentのgetArgumentsでnullが出る
setArgumentsがifの中にあるから?
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/09 03:41
2020/01/09 05:12 編集
2020/01/09 14:23