Android片段后退按

问题描述:

我有几个片段。但是当按下按钮时,所有的片段都会导致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

使用返回堆栈。谷歌的代码,你会直接找到它 –

添加到堆栈中会解决这个问题:

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

在哪里的后台?我没有在代码中看到它。 – Ivan

+0

您只需在'periodFragmentTransaction.commit();'之前写'periodFragmentTransaction.addToBackStack(null);'。 – Javanshir

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弹出以前的片段事务 –