2017-08-14 24 views
0

私のMainActivityクラスでは、私はBottomNavigationViewの3つのタブでアクティビティ(自宅、検索、個人)を切り替えることができます。いずれかのタブをクリックするたびに、それぞれのフラグメントをプルアップしますが、毎回新しいフラグメントを呼び出すと思います。フラグメントを切り替えるときにフラグメント状態を維持する方法

(Instagramの場合と同様に)これらのフラグメントを変更するには、これらのフラグメントが必要です。各フラグメントは現在、非常に基本的(新しく作成され、変更されていません)ですが、別のフラグメントに切り替えて元に戻ったときに状態が保存されるように設定したいと思います。

以下は私の主な活動とホームの断片のコードです。

public class MainActivity extends AppCompatActivity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    BottomNavigationView navigationView = (BottomNavigationView) findViewById(R.id.bottomNavigationView); 
    navigationView.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener); 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    FragmentTransaction transaction = fragmentManager.beginTransaction(); 
    transaction.replace(R.id.content, new HomeFragment()).commit(); 
} 

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener = 
     new BottomNavigationView.OnNavigationItemSelectedListener(){ 
      @Override 
      public boolean onNavigationItemSelected(@NonNull MenuItem item){ 
       FragmentManager fragmentManager = getSupportFragmentManager(); 
       FragmentTransaction transaction = fragmentManager.beginTransaction(); 
       switch (item.getItemId()){ 
        case R.id.HomeItem: 
         transaction.replace(R.id.content, new HomeFragment()).commit(); 
         return true; 
        case R.id.SearchItem: 
         transaction.replace(R.id.content, new SearchFragment()).commit(); 
         return true; 
        case R.id.PersonalItem: 
         transaction.replace(R.id.content, new PersonalFragment()).commit(); 
         return true; 
       } 
       return false; 
      } 
     }; 
} 


public class HomeFragment extends Fragment { 
// TODO: Rename parameter arguments, choose names that match 
private static final String ARG_PARAM1 = "param1"; 
private static final String ARG_PARAM2 = "param2"; 

// TODO: Rename and change types of parameters 
private String mParam1; 
private String mParam2; 

private OnFragmentInteractionListener mListener; 

public HomeFragment() { 
    // Required empty public constructor 
} 

// TODO: Rename and change types and number of parameters 
public static HomeFragment newInstance(String param1, String param2) { 
    HomeFragment fragment = new HomeFragment(); 
    Bundle args = new Bundle(); 
    args.putString(ARG_PARAM1, param1); 
    args.putString(ARG_PARAM2, param2); 
    fragment.setArguments(args); 
    return fragment; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (getArguments() != null) { 
     mParam1 = getArguments().getString(ARG_PARAM1); 
     mParam2 = getArguments().getString(ARG_PARAM2); 
    } 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    return inflater.inflate(R.layout.fragment_home, container, false); 
} 

// TODO: Rename method, update argument and hook method into UI event 
public void onButtonPressed(Uri uri) { 
    if (mListener != null) { 
     mListener.onFragmentInteraction(uri); 
    } 
} 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    if (context instanceof OnFragmentInteractionListener) { 
     mListener = (OnFragmentInteractionListener) context; 
    } else { 
     Toast.makeText(context, "Home Fragment Attached", Toast.LENGTH_SHORT).show(); 
    } 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
    mListener = null; 
} 

public interface OnFragmentInteractionListener { 
    // TODO: Update argument type and name 
    void onFragmentInteraction(Uri uri); 
} 
} 

答えて

0

あなたは、その保存された状態を削除し、フラグメントを削除し、再度追加します置き換えることから、代わりにtransaction.replaceのtransaction.hide(フラグメント)とtransaction.show(フラグメント)を使用する必要があります。 私のやり方では、フラグメントのonPauseメソッドとonReaumeメソッドを呼び出し、状態をリセットしません。

希望すると助かります!

関連する問題