アクションバー付きのアプリがあります。「メイン」フラグメントと「設定」フラグメントがあります。
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
Fragment fragment = new Main();
FragmentManager fragmentManager = getSupportFragmentManager();
switch(position) {
case 0:
fragment = new Main();
break;
case 1:
fragment = new Preferences();
break;
}
fragmentManager.beginTransaction()
.replace(R.id.fragment1, fragment)
.commit();
drawerLayout.closeDrawers();
}
});
「Preferences」フラグメントには、SharedPreferences からの値で更新される seekBar があります。これは、「設定」フラグメント内でこれを行う関連コードです。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
container.removeAllViews();
View view = inflater.inflate(R.layout.preferences, container, false);
fontSizeBar = (SeekBar) view.findViewById(R.id.fontSizeBar);
fontSizeBar.setOnSeekBarChangeListener(this);
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(Preferences.this.getActivity().getBaseContext());
final int fontSize = preferences.getInt("fontSize", 10);
fontSizeBar.setMax(0);
fontSizeBar.setMax(10);
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
fontSizeBar.setProgress(fontSize);
}
});
問題は、変数「fontSize」の値が 10 で、seekBar が次のイベントに応答していることです。
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// TODO Auto-generated method stub
fontSizeBar.setProgress(progress);
Log.v("Progress changed", "Font size: " + progress);
}
ただし、seekBar の位置は変わりません。私はSOとGoogleでたくさん検索してきましたが、今まで運がありませんでした。
追加情報: android.support.v4 を使用しています
アップデート:
seekBar スライダーを動かしても、次のイベントは呼び出されません。また、seekBar スライダーを変更してメイン フラグメントを選択し、設定フラグメントに戻ると、seekBar は選択した値のままです。
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
Log.v("Start touching", "Font size: " + seekBar.getProgress());
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
Log.v("Stop touching", "Font size: " + seekBar.getProgress());
}