2016-03-29 5 views
0

この質問は尋ねられましたが、回答には成功しませんでした。フラグメントが向きを変えて2回作成されました

リサイクルビューのフラグメントがあります。私はこの断片を表示して隠すことができるボタンを持っています。これは、画面の起動が変更されるまで、すべて正常に動作します。その後、断片が再現され、上のものが表示され、隠されていますが、そこに残っているものがあります。

私はどこか

if (savedInstanceState == null) 

を使用する必要がありますが、どこ成功するために管理することはできません理解しています。ありがとう、 ここに私のコードです。

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_maps); 

    recyclerViewFragment = new RecyclerViewFragment(); 

    FragmentTransaction trans = getSupportFragmentManager().beginTransaction(); 
    trans.add(R.id.recycle_view_container, recyclerViewFragment, RECYCLER_FRAGMENT); 
    trans.commit(); 
    trans.show(recyclerViewFragment); 

    Button showHideButton = (Button)findViewById(R.id.button_show_hide); 
    showHideButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      showHideFragment(recyclerViewFragment); 
     } 
    }); 
    showHideButton.playSoundEffect(SoundEffectConstants.CLICK); 

} 

public void showHideFragment(final Fragment fragment){ 

    FragmentTransaction trans = getSupportFragmentManager().beginTransaction(); 
    trans.setCustomAnimations(android.R.anim.slide_in_left , android.R.anim.slide_out_right); 

    if (fragment.isHidden()) { 
     trans.show(fragment); 
     Log.d("hidden","Show"); 
    } else { 
     trans.hide(fragment); 
     Log.d("Shown","Hide"); 
    } 

    trans.commit(); 
} 

ありがとうございます!!!!!!!これに代えて

答えて

1

の上に同じフラグメントを追加しているので、onCreate()が再び呼び出されるということですあなたのフラグメントをマークするのに使用されるタグ

RecyclerViewFragment recyclerViewFragment; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_maps); 
    if(savedInstanceState == null) { 
     recyclerViewFragment = new RecyclerViewFragment(); 

     FragmentTransaction trans = getSupportFragmentManager().beginTransaction(); 
     trans.add(R.id.recycle_view_container, recyclerViewFragment, RECYCLER_FRAGMENT); 
     trans.commit(); 
    }else{ 
     recyclerViewFragment = getSupportFragmentManager().findFragmentByTag(RECYCLER_FRAGMENT); 
     if(savedInstanceState.getString("vi").equals("hid")){ 
      getSupportFragmentManager().beginTransaction().hide(recyclerViewFragment).commit(); 
     } 
    } 

    Button showHideButton = (Button)findViewById(R.id.button_show_hide); 
    showHideButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      FragmentManager manager = getSupportFragmentManager(); 

      if (fragment.isVisible()) { 
       manager.beginTransaction().hide(recyclerViewFragment).commit(); 
      } else { 
       manager.beginTransaction().show(recyclerViewFragment).commit(); 
      } 
     } 
    }); 


} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    if(recyclerViewFragment.isVisible() == true){ 
     outState.putString("vi","vis"); 
    }else{ 
     outState.putString("vi", "hid"); 
    } 
} 
+0

ありがとうございました。これは機能します。下の答えに間違いがありますか? – RJB

+0

私はreplaceの作品を使用するとは思わない。私は分からないが、フラグメントを非表示にして、画面を回転すると、フラグメントがボタンを押すことなく表示されると思う。 – Sam

+0

あなたは完全です。本当にありがとう!!! – RJB

1

trans.add(R.id.recycle_view_container, recyclerViewFragment, RECYCLER_FRAGMENT); 

はこれを試してみてください。

trans.replace(R.id.recycle_view_container, recyclerViewFragment, RECYCLER_FRAGMENT); 

名前は誤解を招くです。 Replaceは実際には追加としても動作します(初めての場合)。何が起こっていることは、私はRECYCLER_FRAGMENTが含まれている一定であることを私が思うあなたのコード にいくつかの変更を加える提案あなたの活動が回転するときに、既存のもの

+0

ありがとう。 – RJB

+0

ありがとう、それは私を1日保存しました! – Mathew

関連する問題