2016-11-07 12 views
-2

私はactivity Aactivity Bを持っています。私のマニフェストファイルでは、起動モードをシングルタスクとして設定し、各アクティビティのインスタンスを1つだけ保持しています。両方の活動で私はViewPagerで3つの断片を使用しています。今、ここに問題があります。activity Aのすべてのフラグメントのフィールドを入力してからactivity Bに移動すると、activity Aのフラグメントで埋められたデータが削除されます。ですから、どのように断片の状態を回復させることができますか?フラグメントがバックスタックに追加されていない場合、ビューページャのフラグメントの状態を復元するにはどうすればよいですか?

//Global Declaration 
Intent i =null; 

//method i used in fragment to save the value of fields. 

@Override 
     public void onStop() { 
      super.onStop(); 
       i.putExtra("customerId", _customerId); 
       i.putExtra("panCardName", _panCardName); 
       i.putExtra("panCardAcknowledgementNmber", _panCardAcknowledgementNmber); 
       i.putExtra("natureOfBusiness", _natureOfBusiness); 
       i.putExtra("annualTurnover", _annualTurnover); 
       i.putExtra("networth", _networth); 
       i.putExtra("occupation", _occupation); 
       i.putExtra("date", _date); 
} 

//method in fragment, where i retrieve the saved values. 

public void onResume() { 
     super.onResume(); 
     i = getActivity().getIntent(); 
     if(i != null) { 
      _customerId = i.getStringExtra("customerId"); 
      _panCardName = i.getStringExtra("panCardName"); 
      _panCardAcknowledgementNmber = i.getStringExtra("panCardAcknowledgementNmber"); 
      _natureOfBusiness = i.getStringExtra("natureOfBusiness"); 
      _annualTurnover = i.getStringExtra("annualTurnover"); 
      _networth = i.getStringExtra("networth"); 

_occupation = i.getStringExtra("occupation"); 
      _date = i.getStringExtra("date"); 
     } 
+0

ご迷惑をお掛け致しますが、ご了承ください。**大胆な**やイタリック*はご使用にならないでください。さらに、あなたは全くコードを投稿していません。私たちは問題を再現しようとするために[mcve]を好む。 –

+0

大丈夫です。そのために残念。今私は私の答えを更新しました。 onResume()は常にnullを返します。 –

+0

@ KenY-N助けてください:( –

答えて

0

あなたは、フラグメントに

を値を保存し、コードの下のようなデータを保持するため

int counter = 0; 
@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putInt("value",counter); 
} 

を使用する必要がまず第一に、

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setRetainInstance(true);   
} 

とonCreateView( )方法

@Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    if (savedInstanceState != null) { 
      int count = savedInstanceState.getInt("value"); 
      Toast.makeText(this, String.valueOf(count) , Toast.LENGTH_LONG).show(); 
    } 
} 
+0

onCreate()はアクティビティの作成時にのみ呼び出すため、setRetainInstance(true)は使用できません。 –

関連する問題