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;