2016-04-28 3 views
0

私は4つのアイテム(ホーム、設定、about、help)を持つナビゲーションドロワーを持っています。アイテムをクリックすると、そのアイテムに対応するフラグメントが他のアイテムに置き換わります。フラグメントを交換するときにSeekbar値を保持する

ユーザーがシークバーの値を変更した場合さて、私は、これは3シークバーでフラグメントを設定していて、彼は、ナビゲーションパネルを開き、ホームをクリックし、設定の断片に戻ってきた後、シークバーが戻っ0"

にあります私はsaveInstanceStateをしようとどのようにフラグメントを変更する前と同じ状態でシークバーを維持します。

これは、ビューがフラグメントで作成されたとき、私はビューを膨らませる原因に問題があると思うのコードである。

、しかし、私はインスタンスが決して破壊されないと思うので、コードを実行するとsaveInstanceStateは決してcalではありませんLED。

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    myFragmentView = inflater.inflate(R.layout.fragment_param, container, false); 
    seekbarAffValeur(); 
    return myFragmentView; 
} 

これは私がフラグメントを変更するときのコードです。

navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
     @Override 
     public boolean onNavigationItemSelected(MenuItem item) { 
      switch (item.getItemId()) { 
       case R.id.home_id: 
        fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
        fragmentTransaction.replace(R.id.main_container, new AcceuilFragment()); 
        fragmentTransaction.commit(); 
        getSupportActionBar().setTitle("Acceuil"); 
        item.setChecked(true); 
        drawerLayout.closeDrawers(); 
        break; 

       case R.id.setting_id: 
        fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
        fragmentTransaction.replace(R.id.main_container, new ParamFragment()); 
        fragmentTransaction.commit(); 
        getSupportActionBar().setTitle("Paramètres"); 
        item.setChecked(true); 
        drawerLayout.closeDrawers(); 

        break; 
       case R.id.about_id: 
        fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
        fragmentTransaction.replace(R.id.main_container, new ProposFragment()); 
        fragmentTransaction.commit(); 
        getSupportActionBar().setTitle("À propos"); 
        item.setChecked(true); 
        drawerLayout.closeDrawers(); 
        break; 
       case R.id.help_id: 
        fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
        fragmentTransaction.replace(R.id.main_container, new AideFragment()); 
        fragmentTransaction.commit(); 
        getSupportActionBar().setTitle("Aide"); 
        item.setChecked(true); 
        drawerLayout.closeDrawers(); 
        break; 
      } 

ありがとうございます。


[OK]をクリックして、解決策を見つけました。

private static int disPosiVal; 
private static int disCarteVal; 
private static int minPosiVal; 
//Pour afficher la valeur des SeekBar. 
public void seekbarAffValeur(){ 
    skbDisPosiValu = (SeekBar) myFragmentView.findViewById(R.id.skbDisPosi); 
    tvDisPosi = (TextView) myFragmentView.findViewById(R.id.tvValeurDisPosi); 
    skbDisCarteValu = (SeekBar) myFragmentView.findViewById(R.id.skbDisCarte); 
    tvDisCarte = (TextView) myFragmentView.findViewById(R.id.tvValeurDisCarte); 
    skbMinuValue = (SeekBar) myFragmentView.findViewById(R.id.skbMinPosi); 
    tvMinuValu = (TextView) myFragmentView.findViewById(R.id.tvValeurMinPosio); 

    skbDisPosiValu.setProgress(disPosiVal); 
    tvDisPosi.setText(disPosiVal+ ""); 
    skbDisCarteValu.setProgress(disCarteVal); 
    tvDisCarte.setText(disCarteVal+""); 
    skbMinuValue.setProgress(minPosiVal); 
    tvMinuValu.setText(minPosiVal+""); 

    skbDisPosiValu.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
      disPosiVal = progress; 
      tvDisPosi.setText(progress + ""); 
     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 
     } 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 
      tvDisPosi.setText(disPosiVal + ""); 

     } 

    }); 
    skbDisCarteValu.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
      disCarteVal = progress; 
      tvDisCarte.setText(progress + ""); 
     } 
     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 
     } 
     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 
      tvDisCarte.setText(disCarteVal + ""); 
     } 
    }); 
    skbMinuValue.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
      minPosiVal = progress; 
      tvMinuValu.setText(progress + ""); 
     } 
     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 
     } 
     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 
      tvMinuValu.setText(minPosiVal + ""); 
     } 
    }); 

ビューは破壊が、断片(と思う)ので、私はちょうど静的変数に自分の値を保存し、ビューが作成されたとき、私はそれが属している値に設定されていません。

+0

?また、表示されたフラグメントを変更するコードを投稿した場合にも役立ちます。 – fractalwrench

+0

ユーザーがseekBarの進行を変更したときに値が設定されます。私は私の答えをより明確に編集します。私は今晩後でフラグメントを変更するときにコードを追加します。ありがとうございます。 –

+0

私の解決策を以下に試しましたか? –

答えて

0

私は、これが問題だと思う - fragmentTransaction.replace(R.id.main_container, new AcceuilFragment());

あなたは基本的に古いフラグメントを削除しています。あなたがする必要があるのは、

fragmentTransaction.replace(R.id.main_container, new AcceuilFragment().addToBackStack(null).commit(); 

です。addToBackStack()は基本的にフラグメントをスタックに置きます。したがって、断片を取得するためにpopBackStack()を呼び出すことができます。 enter code here

ドキュメント:あなたはシークバー値を設定している

FragmentManager popBackStack

FragmentTransaction addToBackStack

関連する問題