2016-11-04 110 views
0

我有幾個片段。但是當按下按鈕時,所有的片段都會導致PeriodFragment。我的問題是如何實現,以便當用戶按下手機上的BACK按鈕時,PeriodFragment將切換回它從中輸入的片段。 這是從PeriodFragment.java Java代碼:Android片段後退按

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; 
    } 

} 

I」新的Android工作室,所以請告訴細節。

+0

使用返回堆棧。谷歌的代碼,你會直接找到它 –

回答

0

添加到堆棧中會解決這個問題:

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()'中使用backstack彈出以前的片段事務 –