2つのfragment間でボタンで移動し、移動した先から戻るボタンを押して戻った時、前の表示が残ったままになる
Android studioでアプリ開発の勉強を始めて2か月のものです。
タブ3つをfragmentで遷移するように作り、そのうちの1つのfragmentAに
さらにfragmentA-1を作りました。
fragmentAからボタンでfragmentA-1に移動して、fragmentA-1でbackボタンを押したとき
前のfragmentAの画面が残ったまま、上に重なるように新しいAの画面が動きます。
サイトを参考にいろいろ見て、試しましたが、自力で解決できなかったので投稿します。
動きとしては、商品アプリで画像をクリックすると、詳細が見れて、戻るボタンで一覧に戻れるようなものを作りたいです。その際、できればAでの状態が保存されていて、戻った時に、一覧画面で途中の見ていたところから、再度見れるようにしたいです。
構成
fragmentA : fragmenttrial.java
activity_fragment_trial.xml
fragmentA-1 : pottery.java
activity_pottery.xml
fragmenttrial.java
public class fragmentTrial extends Fragment{
public fragmentTrial() {
}
private int cnt = 0;
public static fragmentTrial newInstance(int count){
//Fragment インスタンス化
fragmentTrial fragmentTrial02 = new fragmentTrial();
//Bundleにパラメータを設定
Bundle args = new Bundle();
args.putInt("Counter", count);
fragmentTrial02.setArguments(args);
return fragmentTrial02;
}
//@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.activity_fragment_trial, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view,savedInstanceState);
Bundle args = getArguments();
if(args != null){
int count = args.getInt("Counter");
cnt = count + 1;
}
Button appButton = view.findViewById(R.id.Button);
appButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
FragmentManager fragmentManager = getFragmentManager();
if(fragmentManager != null){
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container, pottery.newInstance(cnt));
//BackStackを設定
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
}
});
}
}
pottery.java
public class pottery extends Fragment {
public pottery() {
// Required empty public constructor
}
private int cnt = 0;
public static pottery newInstance(int count){
//Fragment インスタンス化
pottery pottery01 = new pottery();
//Bundleにパラメータを設定
Bundle args = new Bundle();
args.putInt("Counter", count);
pottery01.setArguments(args);
return pottery01;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.activity_pottery, container, false);
}
@Override
public void onViewCreated(View view,@Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Bundle args = getArguments();
if(args != null){
int count = args.getInt("Counter");
cnt = count + 1;
}
Button appButton = view.findViewById(R.id.backBotton);
appButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
FragmentManager fragmentManager = getFragmentManager();
if(fragmentManager != null){
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container, fragmentTrial.newInstance(cnt));
//BackStackを設定
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
}
});
}
}
activity_fragment_trial.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:context=".fragmentTrial">
<android.support.constraint.ConstraintLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".fragmentTrial">
<ScrollView
android:id="@+id/scrollView2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
tools:context=".MainActivity"
tools:layout_editor_absoluteX="16dp">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/linearlayout01"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/Button"
android:layout_width="211dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:text="ToFragment"
android:textAllCaps="false"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.503"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.393" />
<ImageView
android:id="@+id/imageView3"
android:layout_width="wrap_content"
android:layout_height="373dp"
android:scrollbarSize="16dp"
android:src="@drawable/trialpottery" />
</LinearLayout>
</ScrollView>
</android.support.constraint.ConstraintLayout>
</RelativeLayout>
activity_pottery.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ff97"
android:clickable="true"
tools:context=".pottery">
<Button
android:id="@+id/backBotton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="back trial!"
android:textAllCaps="false"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.157" />
</android.support.constraint.ConstraintLayout>