質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

解決済

Android TabLayoutの選択状態を設定したい

Lily_V
Lily_V

総合スコア7

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

1回答

0評価

0クリップ

93閲覧

投稿2022/05/04 11:55

実現したいこと

AndroidStudioでアプリを作成しています。言語はJavaです。
トグルボタンを切り替えた際にタブ内の表示内容を切り替えたいのですが、
2番目以降のタブを選択した状態でトグルボタンを切り替えると、1番目のタブが選択された状態になってしまいます。
"((TabLayout)view).getTabAt(position);”で切り替えようとしてもタブの選択状態が切り変わりません。

方法としましては、TabLayoutにViewPager2を紐づけて、ViewPager2にsetAdapterしなおすことでタブ内容の再表示をしています。その後、タブの選択状態を設定できればと思ったのですが、切り替えるタイミングが悪いのでしょうか?

該当のソースコード

java

public class DetailInfoFragment extends Fragment { private SQLiteDatabase db; private static final String ARG_titleCd = "titleCd"; private static final String ARG_detailList = "detailList"; // タイトルコード(引数保持) private int mTitleCd; // 詳細情報リスト(引数保持) private ArrayList<ArrayList> mDetailList; // 表示フラグ private boolean dispFlg = false; // 選択中のタブ private int selectedPosition = 0; public DetailInfoFragment() { super(R.layout.fragment_detail_info); } /** * Use this factory method to create a new instance of * this fragment using the provided parameters. * * @param titleCd タイトルコード. * @return A new instance of fragment DetailInfoFragment. */ public static DetailInfoFragment newInstance(int titleCd, ArrayList<ArrayList> detailList) { DetailInfoFragment fragment = new DetailInfoFragment(); Bundle args = new Bundle(); args.putInt(ARG_titleCd, titleCd); args.putSerializable(ARG_detailList, (Serializable) detailList); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { mTitleCd = getArguments().getInt(ARG_titleCd); mDetailList = (ArrayList<ArrayList>)getArguments().getSerializable(ARG_detailList); } db = new SqliteOpenHelper(getActivity()).getReadableDatabase(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_detail_info, container, false); } @Override public void onViewCreated(@NonNull final View view, @Nullable Bundle savedInstanceState) { final FragmentsAdapter fragmentsAdapter = new FragmentsAdapter(); // 表示切替Changeイベント Switch toggle = view.findViewById(R.id.switchDisp); toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { dispFlg = isChecked; // タブの選択状態を保持する final TabLayout tabLayout = view.findViewById(R.id.tab_layout); selectedPosition = tabLayout.getSelectedTabPosition(); // 再表示 ViewPager2 viewPager2 = view.findViewById(R.id.view_pager); viewPager2.setAdapter(fragmentsAdapter); // タブの選択状態をセットする tabLayout.getTabAt(selectedPosition).select(); } }); ViewPager2 viewPager2 = view.findViewById(R.id.view_pager); viewPager2.setAdapter(fragmentsAdapter); // タブを追加する TabLayout tabLayout = view.findViewById(R.id.tab_layout); // タブを均一に配置する tabLayout.setTabMode(TabLayout.MODE_FIXED); tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); new TabLayoutMediator(tabLayout, viewPager2, fragmentsAdapter).attach(); } /** * タブレイアウト */ public class FragmentsAdapter extends FragmentStateAdapter implements TabLayoutMediator.TabConfigurationStrategy { public FragmentsAdapter() { super(DetailInfoFragment.this); } @NonNull @Override public Fragment createFragment(int position) { return DetailInfoObjectFragment.newInstance(mDetailList, position, dispFlg); } @Override public int getItemCount() { // タブの数 return mDetailList.size(); } @Override public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) { // タブ名をセット tab.setText("タブ" + position); } } }

java

public class DetailInfoObjectFragment extends Fragment implements CompoundButton.OnCheckedChangeListener { public static final String ARG_OBJECT = "object"; public static final String ARG_POSITION = "position"; public static final String ARG_DISP_FLG = "dispFlg"; private static final String CLM_SONG_NAME = "songName"; private static final String CLM_BIKO = "biko"; ArrayList<Map<String, String>> mDetailList; public static DetailInfoObjectFragment newInstance(ArrayList object, int position, boolean dispFlg) { DetailInfoObjectFragment fragment = new DetailInfoObjectFragment(); Bundle args = new Bundle(); args.putSerializable(ARG_OBJECT, object); args.putInt(ARG_POSITION, position); args.putBoolean(ARG_DISP_FLG, dispFlg); fragment.setArguments(args); return fragment; } public DetailInfoObjectFragment() { super(R.layout.fragment_detail_info_object); } @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { Bundle args = getArguments(); // パラメータを取得する ArrayList<ArrayList<Map<String, String>>> detailList = (ArrayList<ArrayList<Map<String, String>>>)args.getSerializable(ARG_OBJECT); int position = args.getInt(ARG_POSITION); boolean dispFlg = args.getBoolean(ARG_DISP_FLG); mDetailList = detailList.get(position); // 初期表示 initDisp(view, detailList, position, dispFlg); } /** * 初期表示. * @param view * @param detailList * @param position * @param dispFlg */ public void initDisp(View view, ArrayList<ArrayList<Map<String, String>>> detailList, int position, boolean dispFlg) { LinearLayout layoutSonContents = view.findViewById(R.id.layout_song_contents); int cnt = 1; for (Map<String, String> record : detailList.get(position)) { // 曲名テキスト TextView TextSong = new TextView(getActivity()); String song = record.get(CLM_SONG_NAME); if (song == null) { song = "-"; } else { song = cnt + ". " + record.get(CLM_SONG_NAME); } TextSong.setText(song); layoutSongContents.addView(TextSong); if (dispFlg) { // 曲情報表示トグルがONの場合、備考を表示する String biko = record.get(CLM_BIKO); if (biko != null && !biko.isEmpty()) { TextView TextBiko = new TextView(getActivity()); TextBiko.setText(record.get(CLM_BIKO)); layoutSongContents.addView(TextBiko); } } cnt++; } } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。