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

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

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

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

1回答

578閲覧

常にタブを表示させる。

syosinsya109

総合スコア41

Java

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2022/12/11 09:55

編集2022/12/11 09:59

前提

先ほど以下のURLの質問をしたものです。
https://teratail.com/questions/5ljzf8nuh7x07v#reply-a2lvevxofy062w
画面遷移を行うプログラムにおいて、明らかに分からない点がありましたので質問させてください。
自分の作成しているプログラムはandroidにおいてタブをフッダーにして操作するものです。しかし先ほどのやり方でした場合、遷移までは成功したのですが、Page1Fragmentの中の内容が処理するごとに増えていき、画面が多くなるにつれて見にくいコードになってしまいます。それを防ぐためにクラスを分けたいです(可読性を上げるため)。
しかしクラスの数は増やしたくありません。1画面1つに抑えたいです(沢山画面を作る予定のため)

実現したいこと

常にタブを表示させる。

該当のソースコード

java(MainActivity.java)

1import androidx.annotation.NonNull; 2import androidx.appcompat.app.AppCompatActivity; 3import androidx.fragment.app.*; 4import androidx.viewpager2.adapter.FragmentStateAdapter; 5import androidx.viewpager2.widget.ViewPager2; 6 7import android.os.Bundle; 8 9import com.google.android.material.tabs.TabLayout; 10import com.google.android.material.tabs.TabLayoutMediator; 11 12public class MainActivity extends AppCompatActivity { 13 @Override 14 protected void onCreate(Bundle savedInstanceState) { 15 super.onCreate(savedInstanceState); 16 setContentView(R.layout.activity_main); 17 18 ViewPager2 pager = findViewById(R.id.pager); 19 TabLayout tabs = findViewById(R.id.tab); 20 21 String[] hposition = {"てすと1","てすと2"}; 22 pager.setAdapter(new PageAdapter(this)); 23 new TabLayoutMediator(tabs, pager, (tab, position) -> tab.setText(hposition[position])).attach(); 24 } 25 26 private static class PageAdapter extends FragmentStateAdapter { 27 public PageAdapter(FragmentActivity activity) { 28 super(activity); 29 } 30 31 @NonNull 32 @Override 33 public Fragment createFragment(int position) { 34 Fragment fragment = null; 35 if (position == 0) { 36 fragment = new Page1Fragment(R.layout.activity_page1_fragment); 37 } else if (position == 1) { 38 fragment = new Page2Fragment(); 39 } 40 return fragment; 41 } 42 43 @Override 44 public int getItemCount() { 45 return 2; 46 } 47 } 48}

java(Page1Fragment.java)

1import androidx.annotation.NonNull; 2import androidx.annotation.Nullable; 3import androidx.appcompat.app.AppCompatActivity; 4import androidx.fragment.app.Fragment; 5 6import android.content.Intent; 7import android.os.Bundle; 8import android.view.View; 9import android.widget.Button; 10 11public class Page1Fragment extends Fragment { 12 13 public Page1Fragment(int layout) { 14 super(layout); 15 } 16 17 @Override 18 public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { 19 super.onViewCreated(view, savedInstanceState); 20 21 Button button1 = view.findViewById(R.id.button1); 22 if(button1 != null){ 23 button1.setOnClickListener(v -> { 24 startActivity(new Intent(getActivity(), SampleActivity.class)); 25 }); 26 } 27 28 Button back = view.findViewById(R.id.back); 29 if(back != null){ 30 back.setOnClickListener(v -> { 31 getActivity().finish(); 32 }); 33 } 34 } 35}

java(Page2Fragment.java)

1import androidx.annotation.NonNull; 2import androidx.annotation.Nullable; 3import androidx.appcompat.app.AppCompatActivity; 4import androidx.fragment.app.Fragment; 5 6import android.content.Intent; 7import android.os.Bundle; 8import android.view.View; 9import android.widget.Button; 10 11public class Page2Fragment extends Fragment { 12 public Page2Fragment() { 13 super(R.layout.activity_page2_fragment); 14 } 15 16 @Override 17 public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { 18 super.onViewCreated(view, savedInstanceState); 19 20 Button button2 = view.findViewById(R.id.button2); 21 button2.setOnClickListener(v -> { 22 startActivity(new Intent(getActivity(), SampleActivity.class)); 23 }); 24 } 25}

java(SampleActivity.java)

1import androidx.annotation.NonNull; 2import androidx.appcompat.app.AppCompatActivity; 3import androidx.fragment.app.Fragment; 4import androidx.fragment.app.FragmentActivity; 5import androidx.viewpager2.adapter.FragmentStateAdapter; 6import androidx.viewpager2.widget.ViewPager2; 7 8import android.os.Bundle; 9 10import com.google.android.material.tabs.TabLayout; 11import com.google.android.material.tabs.TabLayoutMediator; 12 13public class SampleActivity extends AppCompatActivity { 14 15 @Override 16 protected void onCreate(Bundle savedInstanceState) { 17 super.onCreate(savedInstanceState); 18 setContentView(R.layout.activity_main); 19 20 ViewPager2 pager = findViewById(R.id.pager); 21 TabLayout tabs = findViewById(R.id.tab); 22 23 String[] hposition = {"てすと1","てすと2"}; 24 pager.setAdapter(new PageAdapter(this)); 25 new TabLayoutMediator(tabs, pager, (tab, position) -> tab.setText(hposition[position])).attach(); 26 } 27 28 private static class PageAdapter extends FragmentStateAdapter { 29 public PageAdapter(FragmentActivity activity) { 30 super(activity); 31 } 32 33 @NonNull 34 @Override 35 public Fragment createFragment(int position) { 36 Fragment fragment = null; 37 if (position == 0) { 38 fragment = new Page1Fragment(R.layout.activity_sample); 39 } else if (position == 1) { 40 fragment = new Page2Fragment(); 41 } 42 return fragment; 43 } 44 45 @Override 46 public int getItemCount() { 47 return 2; 48 } 49 } 50}

xml(activity_main.xml)

1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:app="http://schemas.android.com/apk/res-auto" 5 xmlns:tools="http://schemas.android.com/tools" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 android:gravity="center" 9 android:orientation="vertical" 10 android:padding="20dp" 11 tools:context=".MainActivity"> 12 13 <androidx.viewpager2.widget.ViewPager2 14 android:id="@+id/pager" 15 android:layout_width="0dp" 16 android:layout_height="0dp" 17 android:layout_weight="1" 18 app:layout_constraintBottom_toTopOf="@+id/tab" 19 app:layout_constraintEnd_toEndOf="parent" 20 app:layout_constraintStart_toStartOf="parent" 21 app:layout_constraintTop_toTopOf="parent" /> 22 23 <com.google.android.material.tabs.TabLayout 24 android:id="@+id/tab" 25 android:layout_width="match_parent" 26 android:layout_height="0dp" 27 app:layout_constraintBottom_toBottomOf="parent" 28 app:layout_constraintEnd_toEndOf="parent" 29 app:layout_constraintStart_toStartOf="parent" 30 app:tabSelectedTextColor="@color/teal_200" /> 31</androidx.constraintlayout.widget.ConstraintLayout>

xml(activity_page1_fragment.xml)

1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 tools:context=".Page1Fragment"> 8 9 10 <Button 11 android:id="@+id/button1" 12 android:layout_width="wrap_content" 13 android:layout_height="wrap_content" 14 android:text="ボタン1" 15 app:layout_constraintBottom_toBottomOf="parent" 16 app:layout_constraintEnd_toEndOf="parent" 17 app:layout_constraintStart_toStartOf="parent" 18 app:layout_constraintTop_toTopOf="parent" /> 19</androidx.constraintlayout.widget.ConstraintLayout>

xml(activity_page2_fragment.xml)

1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 tools:context=".Page2Fragment"> 8 9 <Button 10 android:id="@+id/button2" 11 android:layout_width="wrap_content" 12 android:layout_height="wrap_content" 13 android:text="ボタン2" 14 app:layout_constraintBottom_toBottomOf="parent" 15 app:layout_constraintEnd_toEndOf="parent" 16 app:layout_constraintStart_toStartOf="parent" 17 app:layout_constraintTop_toTopOf="parent" /> 18</androidx.constraintlayout.widget.ConstraintLayout>

xml(activity_sample.xml)

1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 tools:context=".SampleActivity"> 8 9 <Button 10 android:id="@+id/back" 11 android:layout_width="wrap_content" 12 android:layout_height="wrap_content" 13 android:text="戻る" 14 app:layout_constraintBottom_toBottomOf="parent" 15 app:layout_constraintEnd_toEndOf="parent" 16 app:layout_constraintStart_toStartOf="parent" 17 app:layout_constraintTop_toTopOf="parent" /> 18</androidx.constraintlayout.widget.ConstraintLayout>

試したこと

クラス分けをして、フラグメントを分ければ、処理の部分を分ける羽目になってしまいます。
例えば
Page1Fragmentから別のSampleActivityに飛ばしたとして、sampleの処理は別のフラグメント(SampleFragment)に飛ばすことになると思います。(遷移先でもタブを操作したいため)
そうなってくるとファイル数が1画面で2つ必要となってきて整理が大変になるため、実用的ではありません。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2022/12/11 10:55

まず、フラグメントのコンストラクタにパラメータを付けてはいけません。 フラグメントはシステムによって再生成される場合があり、その時はパラメータの無いコンストラクタが呼ばれます。その際にパラメータの無いコンストラクタが無いとアプリが落ちます。 パラメータが必要でしたら、setArgument(Bundle) で設定してフラグメント内で getArgument() する処理が必要です。(そしてその手間を隠す為に newInstance メソッド等を作ることになります。)
jimbe

2022/12/11 11:10 編集

「可読性を上げるため」にクラスを分けるのに「クラスの数は増やしたくありません」というのは二律背反です。 複数個所で行っている処理を纏めるというのはわかりますが、それにしては質問のコードは何もしていません。 何が分ける必要があって何が共通化出来るのかをコードから読み取るとすれば、そもそもアクティビティを分ける必要が無いです。 フラグメントから直接 startActivity したり 親アクティビティを finish したりはしない方が良いと思います。 画面遷移をあちこちで行うと、それこそ可読性が下がる行為ではないでしょうか。
jimbe

2022/12/11 11:19 編集

ちなみに、 フラグメントの中にもフラグメントを置けますので、 ViewPager で管理する領域に親フラグメントを配置し、その中に子フラグメントを入れることもできます。 単にタブの中のフラグメントを別のものにするのであれば、 PageAdapter の createFragment で該当タブに設置するフラグメントを別のものにすることも出来るでしょう。
syosinsya109

2022/12/11 11:25 編集

回答ありがとうございます。 自分はmainみたいな切り替えるactivityを遷移するごとに行わなければいけません。なのでmainを再利用するには、フラグメントで処理を分ける事しか思いつかなかったので、フラグメントのコンストラクタに引数を置いてしまいました。 確かにあちこちで遷移を行うと可読性が下がりうると思います。しかしその仕様しか思いつきませんでした。。。遷移用のactivityなどを作った方がいいということでしょうか。 ViewPager で管理する領域に親フラグメントを配置し、その中に子フラグメントを入れるということは、Page1Fragmentに他のページで使うフラグメントを書くということでしょうか。コードが長くならないでしょうか。。それが心配です。。
jimbe

2022/12/11 12:16 編集

> 自分はmainみたいな切り替えるactivityを遷移するごとに行わなければいけません。 「アクティビティにタブがあり、それはアプリ実行中は常に有って、そのタブの中のフラグメントでボタンを押したら、そのタブ内のフラグメントが別のフラグメントに変わる」ということの為にアクティビティから作り直すのは、画面遷移としては無駄が多過ぎると思います。 > Page1Fragmentに他のページで使うフラグメントを書くということでしょうか ほんの僅かの違いでしか無ければそれでも良いかもしれませんし、大分違うのであれば別のフラグメントとして作られればよいでしょう。大分違うと思っていても、違いを吸収するようば構造・技術を使えば、流用出来るかもしれません。前の質問で状況に依ると申し上げたのはそういうことです。 コード量は、少なくとも質問からは本来やろうとされていることの片鱗も分かりませんので、何をするのにどれだけのコード量になるのを心配されているのかも分かりません。 別にコードが数10万行になったところでコンピュータからはみ出してくるわけでもありませんので、3画面程度を実際に書いてみてからどうなるか心配してみては如何でしょうか。
guest

回答1

0

前の質問の回答のコードから一部流用となりますが、 "てすと1" タブ内で2つのフラグメント (Page1Fragment と Page11Fragment ) がボタン操作で入れ替わるようにしてみました。
activity_main.xml 、 Page2Fragment とそのレイアウトは変わらずなので省略です。

MainActivity.java

java

1import android.os.Bundle; 2 3import androidx.annotation.NonNull; 4import androidx.appcompat.app.AppCompatActivity; 5import androidx.fragment.app.*; 6import androidx.lifecycle.ViewModelProvider; 7import androidx.viewpager2.adapter.FragmentStateAdapter; 8import androidx.viewpager2.widget.ViewPager2; 9 10import com.google.android.material.tabs.*; 11 12import java.util.*; 13import java.util.function.Supplier; 14 15public class MainActivity extends AppCompatActivity { 16 @Override 17 protected void onCreate(Bundle savedInstanceState) { 18 super.onCreate(savedInstanceState); 19 setContentView(R.layout.activity_main); 20 21 ViewPager2 pager = findViewById(R.id.pager); 22 TabLayout tabs = findViewById(R.id.tab); 23 24 TabPageAdapter adapter = new TabPageAdapter(this) 25 .addTab("てすと1", Page1Fragment::new) 26 .addTab("てすと2", Page2Fragment::new); 27 28 pager.setAdapter(adapter); 29 new TabLayoutMediator(tabs, pager, adapter).attach(); 30 31 MainViewModel viewModel = new ViewModelProvider(this).get(MainViewModel.class); 32 viewModel.getPage1Value().observe(this, text -> { 33 adapter.changeSupplier("てすと1", Page11Fragment::new); 34 }); 35 viewModel.getPage11Value().observe(this, b -> { 36 adapter.changeSupplier("てすと1", Page1Fragment::new); 37 }); 38 } 39 40 private static class TabPageAdapter extends FragmentStateAdapter implements TabLayoutMediator.TabConfigurationStrategy { 41 private static class TabInfo { 42 final String text; //タブのテキスト 43 final Supplier<Fragment> supplier; //フラグメント生成器 44 TabInfo(String text, Supplier<Fragment> supplier) { 45 this.text = text; 46 this.supplier = supplier; 47 } 48 } 49 private List<TabInfo> tabInfoList = new ArrayList<>(); 50 51 public TabPageAdapter(FragmentActivity activity) { 52 super(activity); 53 } 54 55 TabPageAdapter addTab(@NonNull String tabText, @NonNull Supplier<Fragment> supplier) { 56 int position = tabInfoList.size(); 57 tabInfoList.add(new TabInfo(tabText, supplier)); 58 notifyItemInserted(position); 59 return this; 60 } 61 62 void changeSupplier(@NonNull String tabText, @NonNull Supplier<Fragment> newSupplier) { 63 for(int i=0; i<tabInfoList.size(); i++) { 64 if(tabInfoList.get(i).text.equals(tabText)) { 65 tabInfoList.set(i, new TabInfo(tabText, newSupplier)); 66 notifyItemChanged(i); 67 break; 68 } 69 } 70 } 71 72 @NonNull 73 @Override 74 public Fragment createFragment(int position) { 75 return tabInfoList.get(position).supplier.get(); 76 } 77 78 @Override 79 public int getItemCount() { 80 return tabInfoList.size(); 81 } 82 83 @Override 84 public long getItemId(int position) { 85 return tabInfoList.get(position).hashCode(); 86 } 87 88 @Override 89 public boolean containsItem(long itemId) { 90 for(TabInfo t : tabInfoList) if(t.hashCode() == itemId) return true; 91 return false; 92 } 93 94 @Override 95 public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) { 96 tab.setText(tabInfoList.get(position).text); 97 } 98 } 99}

MainViewModel.java

java

1import androidx.lifecycle.*; 2 3public class MainViewModel extends ViewModel { 4 private MutableLiveData<String> page1ValueLiveData = new MutableLiveData<>(""); 5 LiveData<String> getPage1Value() { return page1ValueLiveData; } 6 void setPage1Value(String value) { page1ValueLiveData.setValue(value); } 7 8 private MutableLiveData<Boolean> page11ValueLiveData = new MutableLiveData<>(false); 9 LiveData<Boolean> getPage11Value() { return page11ValueLiveData; } 10 void setPage11Value(boolean value) { page11ValueLiveData.setValue(value); } 11}

Page1Fragment.java

java

1import android.os.Bundle; 2import android.view.View; 3import android.widget.*; 4 5import androidx.annotation.*; 6import androidx.fragment.app.Fragment; 7import androidx.lifecycle.ViewModelProvider; 8 9public class Page1Fragment extends Fragment { 10 public Page1Fragment() { 11 super(R.layout.fragment_page1); 12 } 13 14 @Override 15 public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { 16 super.onViewCreated(view, savedInstanceState); 17 18 MainViewModel viewModel = new ViewModelProvider(requireActivity()).get(MainViewModel.class); 19 20 EditText editText = view.findViewById(R.id.edittext); 21 22 Button setButton = view.findViewById(R.id.set_button); 23 setButton.setOnClickListener(v -> { 24 viewModel.setPage1Value(editText.getText().toString()); 25 }); 26 } 27}

res/layout/fragment_page1.xml

xml

1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:app="http://schemas.android.com/apk/res-auto" 5 xmlns:tools="http://schemas.android.com/tools" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 tools:context=".Page1Fragment"> 9 10 <EditText 11 android:id="@+id/edittext" 12 android:layout_width="match_parent" 13 android:layout_height="wrap_content" 14 android:textSize="30dp" 15 android:inputType="text" 16 android:hint="text" 17 app:layout_constraintBottom_toBottomOf="parent" 18 app:layout_constraintEnd_toEndOf="parent" 19 app:layout_constraintStart_toStartOf="parent" 20 app:layout_constraintTop_toTopOf="parent" /> 21 <Button 22 android:id="@+id/set_button" 23 android:layout_width="wrap_content" 24 android:layout_height="wrap_content" 25 android:text="セット" 26 app:layout_constraintBottom_toBottomOf="parent" 27 app:layout_constraintEnd_toEndOf="parent" 28 app:layout_constraintStart_toStartOf="parent" 29 app:layout_constraintTop_toBottomOf="@id/edittext" /> 30</androidx.constraintlayout.widget.ConstraintLayout>

Page11Fragment.java

java

1import android.os.Bundle; 2import android.view.View; 3import android.widget.*; 4 5import androidx.annotation.*; 6import androidx.fragment.app.Fragment; 7import androidx.lifecycle.ViewModelProvider; 8 9public class Page11Fragment extends Fragment { 10 public Page11Fragment() { 11 super(R.layout.fragment_page11); 12 } 13 14 @Override 15 public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { 16 super.onViewCreated(view, savedInstanceState); 17 18 MainViewModel viewModel = new ViewModelProvider(requireActivity()).get(MainViewModel.class); 19 20 TextView textView = view.findViewById(R.id.textview); 21 viewModel.getPage1Value().observe(getViewLifecycleOwner(), text -> { 22 textView.setText(text); 23 }); 24 25 Button returnButton = view.findViewById(R.id.return_button); 26 returnButton.setOnClickListener(v -> { 27 viewModel.setPage11Value(true); //値は使っていないので何でも良い 28 }); 29 } 30}

res/layout/fragment_page11.xml

xml

1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:app="http://schemas.android.com/apk/res-auto" 5 xmlns:tools="http://schemas.android.com/tools" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 android:background="#ffeeff" 9 tools:context=".Page11Fragment"> 10 11 <Button 12 android:id="@+id/return_button" 13 android:layout_width="wrap_content" 14 android:layout_height="wrap_content" 15 android:text="戻る" 16 app:layout_constraintBottom_toTopOf="@id/textview" 17 app:layout_constraintEnd_toEndOf="parent" 18 app:layout_constraintStart_toStartOf="parent" 19 app:layout_constraintTop_toTopOf="parent" /> 20 <TextView 21 android:id="@+id/textview" 22 android:layout_width="match_parent" 23 android:layout_height="wrap_content" 24 android:textSize="30dp" 25 app:layout_constraintBottom_toBottomOf="parent" 26 app:layout_constraintEnd_toEndOf="parent" 27 app:layout_constraintStart_toStartOf="parent" 28 app:layout_constraintTop_toTopOf="parent" /> 29</androidx.constraintlayout.widget.ConstraintLayout>

投稿2022/12/11 13:45

編集2022/12/11 13:49
jimbe

総合スコア12865

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問