1

我有一个应用程序与操作栏。它有一个“主”片段和一个“首选项”片段。使用SharedPreferences中的值更新SeekBar片段

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()被调用,因为我可以看到输出“进度改变”,“字体尺寸:10”在logcat中,但SeekBar没有在视觉上更新。此外,SeekBar不响应onStartTrackingTouch()和onStopTrackingTouch()方法。

我将不胜感激任何有关此问题的信息。

回答

0

你做的一切权利,膨胀的意见,并建立逻辑,但在最后你这样做:

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

将返回一个膨胀布局(所以你以前放下一切你完成)。相反,您需要返回以前充气的view

return view;