2016-11-04 22 views
0

私はいくつかの断片を持っています。しかし、ボタンを押すとすべてのフラグメントがPeriodFragmentになります。私の質問は、ユーザーが携帯電話のBACKボタンを押すとPeriodFragmentが入力されたフラグメントに切り替わるように実装する方法です。 これはPeriodFragment.javaからJavaコードです:Android Fragment Back press

public class PeriodFragment extends Fragment { 

    Button btnPretrazi; 

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


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 

     View view = inflater.inflate(R.layout.fragment_period, container, false); 


     //buttonPretraziPeriod 
     btnPretrazi = (Button) view.findViewById(R.id.buttonPretraziPeriod); 

     btnPretrazi.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(getContext(),"test", Toast.LENGTH_SHORT).show(); 
      } 
     }); 


     return view; 
    } 

} 

これは私のTvrdjavaFragment.java(PeriodFragment.javaに切り替えるためのボタンを持つ断片の一つ)である:

package com.example.ivanp.msnis; 

public class TvrdjavaFragment extends Fragment { 

    Button btnIdinaperiod; 

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


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     View view = inflater.inflate(R.layout.fragment_tvrdjava, container, false); 
     // Inflate the layout for this fragment 
     //show date 
     TextView datumprikaz = (TextView) view.findViewById(R.id.datumprikaz); 
     Date danas = new Date(); 

     SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy"); 
     String novDatum = sdf.format(danas); 

     datumprikaz.setText(novDatum); 
     //End of show date 

     btnIdinaperiod = (Button) view.findViewById(R.id.buttonIdinaperiod); 

     btnIdinaperiod.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       PeriodFragment periodFragment = new PeriodFragment(); 
       FragmentTransaction periodFragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction(); 
       periodFragmentTransaction.replace(R.id.frame, periodFragment); 
       periodFragmentTransaction.commit(); 
      } 
     }); 

     return view; 
    } 

} 

私は」アンドロイドスタジオの新機能ですので、詳細を教えてください。

+0

バックスタックを使用します。グーグルコード、あなたはそれを直接見つける –

答えて

0

backstackに追加すると、問題が解決されます:あなたのアプリ内の断片を使用する場合

periodFragmentTransaction.replace(R.id.frame, periodFragment); 
periodFragmentTransaction.addToBackStack(null); 
periodFragmentTransaction.commit(); 
+0

バックスタックはどこですか?私はコードでそれを見ません。 – Ivan

+0

'periodFragmentTransaction.commit();'の前に 'periodFragmentTransaction.addToBackStack(null);'を書くだけでいいです。 – Javanshir

1

According to android docs、個々FragmentTransactionオブジェクトがバックスタックに追加されなければならない状況の変化を表すことができます。たとえば、フラグメントを交換してハンドセットにマスター/ディテール・フローを実装する場合は、詳細画面で「戻る」ボタンを押すと、ユーザーがマスター画面に戻ります。これを行うには、トランザクションをコミットする前にaddToBackStack()を呼び出します。

// Works with either the framework FragmentManager or the 
// support package FragmentManager (getSupportFragmentManager). 
getSupportFragmentManager().beginTransaction() 
         .add(detailFragment, "detail") 
         // Add this transaction to the back stack 
         .addToBackStack() 
         .commit(); 
+0

どこに追加しますか?どこにJavaファイル? – Ivan

+0

あなたの活動では、フラグメントを呼び出すときはどこでも... あなたの 'onBackPressed()'でバックスタックを使って前のフラグメントトランザクションをポップします –