1

これは私の問題です。たとえば、アンドロイドでフラグメントを作成すると、次のようになります。

GastosSectionFragment gastosFragment = new GastosSectionFragment();
Fragment.gastosFragment.darUserID(userKey);

そのアクティビティに単純な整数を送信しますが、問題ありません。たとえば、番号 1 を送信するとします。フラグメントを作成するため、そのクラス内の属性に格納されます。すべて正常に動作します。番号を受け取ります。しかし、電話を回転させると、変数「userKEYが失われ、ceroに変換されます」電話を水平に回転させると、その番号を保存できません。その変数のデータを保存するにはどうすればよいですか。

ここに、フラグメント内に「userKey」を受け取る方法のコードを入れます。

public long darUserID(long userKey) {
    // TODO Auto-generated method stub
    return user_id = userKey;
}

そして onCreate メソッドを持つ属性。

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_section_gastos,
            container, false);

    idStatico = darUserID(user_id);

そして、私はその小さな数を保存することはできません. これは FragmentActivity ではなく、このクラスは単なるFRAGMENTです。初めて問題なく、画面を回転させると、以前に受け取った番号が失われました。Fragment には OnSaveBundleInstances がありません。

4

3 に答える 3

1

user_idフラグメントは、方法でバンドルに保存し、onSaveInstanceState方法で向きを変更した後に復元できますonCreateView。このフラグメント ガイドを確認してください。特に、フラグメントの状態を保存する例が示されています。

アクティビティ コードは同じままで (メソッド名を変更しただけです)、フラグメントは次のようになります。

    class GastosSectionFragment extends Fragment {

       private static final String BUNDLE_USER_ID = "BUNDLE_USER_ID";

       private long user_id;

       public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         View rootView = inflater.inflate(R.layout.fragment_section_gastos, container, false);

         if (savedInstanceState != null)
             user_id = savedInstanceState.getLong(BUNDLE_USER_ID);

         // now is your user_id restored after orientation change, 
         // so you can do some stuff with it            

         return rootView;
      }

      public void onSaveInstanceState(Bundle outState) {
         super.onSaveInstanceState(outState);
         outState.putLong(BUNDLE_USER_ID, user_id);
      }

      public long setUserID(long userKey) {
         this.user_id = userKey;
      }
   }
于 2013-10-12T07:45:39.083 に答える
0

KOSOの回答後、これが私が問題を解決する方法です。他の人の助けになることを願っています.

初めてフラグメントを作成すると、すべてがうまく機能し、userKey を送信すると、すべて問題ありません。

GastosSectionFragment gastosFragment = new GastosSectionFragment();
Fragment.gastosFragment.darUserID(userKey);

これを修正するために、電話が回転したときのフラグメント (たとえば、水平方向) は、オーバーライド メソッドOnCreateView()を呼び出します。電話を回転させるたびに、このメソッドが呼び出されます。

public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout.fragment_section_gastos,
    container, false);
//This is not null when we rotate the screen, first we save the Bundle SavedInstance
//After do that we put a integer, in this case the userKey
//then we recover the user key, and everything will work fine.
if (savedInstanceState != null)
{
    this.savedInstanceState = savedInstanceState;
    savedInstanceState.putInt("userKey", (int) idStatico);
    idStatico = savedInstanceState.getInt("userKey");
}
//this will be null for the first time, only the first time this will bse used.
if (savedInstanceState == null)
{
    idStatico = darUserID(user_id);
}
//Do the rest of the work

}
于 2013-10-13T19:14:28.353 に答える