2012-12-16 43 views
1

難道你沒有人建議我如何實現saveFragmentInstanceState()或其他一些方法來檢索片段實例時,按下後退按鈕。我用自己的堆棧段,即代碼波紋管:如何實現saveFragmentInstanceState?

public class stackA extends ActivityInTab { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Log.i("StackA", "onCreate"); 

     if(savedInstanceState == null){ 
      navigateTo(new fragmentA()); 
     } 

    } 
} 

接下來是實現ActivityInTab類的。我認爲這個類必須實現保存和檢索片段狀態的方法,但我仍然無法找到如何做到這一點的方法。

abstract class ActivityInTab extends FragmentActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_in_tab); 

     Log.i("ActivityInTab", "onCreate"); 
    } 

    protected void navigateTo(Fragment newFragment) { 
     FragmentManager manager = getSupportFragmentManager(); 
     FragmentTransaction ft = manager.beginTransaction(); 
     ft.replace(R.id.content, newFragment); 
     ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
     ft.addToBackStack(null); 
     ft.commit(); 
    } 
    @Override 
    public void onBackPressed() { 

     Log.i("ActivityInTab", "onBackPressed"); 

     FragmentManager manager = getSupportFragmentManager(); 
     if (manager.getBackStackEntryCount() > 1) { 
      super.onBackPressed(); 
     } else {    
      // Otherwise, ask user if he wants to leave :) 
      //showExitDialog(); 
      super.onBackPressed(); 
     } 
    } 
} 

最後,這是片段的imlementation:

public class fragmentA extends Fragment { 

    private LinearLayout ll; 
    private FragmentActivity fa; 

    private String textViewText; 

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

     Log.i("Fragment A", "onCreateView"); 

     fa = super.getActivity(); 
     ll = (LinearLayout) inflater.inflate(R.layout.fragmenta, container, 
       false); 
     Button next = (Button) ll.findViewById(R.id.button1); 
     Button randomBtn = (Button) ll.findViewById(R.id.random_button); 
     final TextView randomText = (TextView) ll 
       .findViewById(R.id.random_textview); 
     next.setOnClickListener(new View.OnClickListener() { 

        public void onClick(View view) { 

          ((ActivityInTab) getActivity()).navigateTo(new      
          fragmentB()); 
      } 
     }); 

     randomBtn.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       randomText.setText(String.valueOf(Math.random())); 
       textViewText = randomText.getText().toString(); 
      } 
     }); 

     if (savedInstanceState != null) { 
      randomText.setText(savedInstanceState.getString("TextView")); 
     } 

     return ll; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

     // setRetainInstance(true); 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putString("TextView", textViewText); 
    } 
} 

我能救實例狀態僅用於定向改變使用onSaveInstanceState(Bundle outState),但沒有爲返回鍵。

我會非常感謝任何建議,謝謝。

回答

1

在onBackPressed方法中,您可以訪問FragmentManager,它可以使用FragmentManager方法「findFragmentById」或「findFragmentByTag」爲您檢索任何片段。

根據添加片段的方式,您可以使用這兩種方法中的任何一種方法直接訪問您希望保存的任何片段。

+0

你能舉一些例子嗎? –