【问题标题】:Update SeekBar in Fragment with value from SharedPreferences使用 SharedPreferences 中的值更新 Fragment 中的 SeekBar
【发布时间】:2014-10-08 23:01:03
【问题描述】:

我有一个带有操作栏的应用。它有一个“Main”片段和一个“Preferences”片段。

    final Main main = new Main();
    final Preferences preferences = new Preferences();
    drawer.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
            Fragment fragment= null;
            FragmentManager fragmentManager = getSupportFragmentManager();
            switch(position) {
                case 0:
                    fragment = main;
                    break;
                case 1:
                    fragment = preferences;
                    break;
            }
            fragmentManager.beginTransaction()
                .replace(R.id.fragment1, fragment)
                .commit();
            drawerLayout.closeDrawers();
            }
        });

“首选项”片段有一个使用 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);

    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(Preferences.this.getActivity().getBaseContext());
    final int fontSize = preferences.getInt("fontSize", 10);


    getActivity().runOnUiThread(new Runnable() {
        @Override
        public void run() {
            fontSizeBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){

                @Override
                public void onProgressChanged(SeekBar seekBar, int progress,
                        boolean fromUser) {
                    Log.v("Progress changed", "Font size: " + progress);
                }

                @Override
                public void onStartTrackingTouch(SeekBar seekBar) {
                    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());
                }

            });
            fontSizeBar.setMax(10);
            fontSizeBar.setProgress(fontSize);
        }
    });

    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.preferences, container, false);

}

调用了onProgressChanged()方法,因为我在LogCat中可以看到输出“Progress changed”,“Font size: 10”,但是SeekBar没有视觉更新。此外,SeekBar 不响应 onStartTrackingTouch() 和 onStopTrackingTouch() 方法。

我将不胜感激任何可以阐明问题的信息。

【问题讨论】:

    标签: android android-fragments android-actionbar seekbar android-seekbar


    【解决方案1】:

    你做的一切都是正确的,膨胀视图并设置逻辑,但最后你这样做了:

    return inflater.inflate(R.layout.preferences, container, false);
    

    这将返回一个膨胀的布局(所以你放弃你以前所做的一切)。相反,您需要返回您之前膨胀的view

    return view;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-28
      • 2019-05-16
      • 1970-01-01
      • 2021-03-20
      相关资源
      最近更新 更多