2014-01-17 3 views
3

Привет Я новичок в Android и Java и столкнулся с проблемой. Моя проблема заключается в том, что я пытаюсь добавить PreferenceScreen к своей линейной компоновке, поэтому я могу установить setOnSeekBarChangeListener() на поисковой строке в res/layout/activity_main.xml. В настоящий момент PreferenceScreen и LinearLayout добавляются в представление, но они находятся друг над другом, но это не то, что я хочу. Вместо этого я хочу, чтобы PreferenceScreen включался вместо ListView внутри моего файла макета.Добавление PreferenceScreen to linearlayout

разреш/XML/settings.xml

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
    <PreferenceCategory 
     android:title="Category" 
     android:key="category_preference"> 
     <SwitchPreference 
      android:key="switch_preference" 
      android:title="Title" 
      android:summary="Summary" 
      android:defaultValue="true" /> 

     <CheckBoxPreference 
      android:key="checkbox_preference" 
      android:title="Title" 
      android:summary="Summary" 
      android:defaultValue="true" /> 
    </PreferenceCategory> 
</PreferenceScreen> 

разреш/макет/activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:orientation="vertical" 
    android:layout_height="fill_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 

    <SeekBar 
     android:id="@+id/main_seek_bar" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" /> 

    <ListView android:id="@android:id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 
</LinearLayout> 

MainActivity.java

public class MainActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit(); 
     setContentView(R.layout.activity_main); 

     SeekBar seekBar = (SeekBar) findViewById(R.id.main_seek_bar); 

     seekBar.setOnTouchListener(new SeekBar.OnTouchListener() { 
      @Override 
      public boolean onTouch(View arg0, MotionEvent arg1) { 
       // TODO Auto-generated method stub 
       return false; 
      } 
     }); 
    } 

    public static class SettingsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener { 
     public static final String KEY_PREF_SYNC_CONN = "pref_syncConnectionType"; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      addPreferencesFromResource(R.xml.settings); 
      onSharedPreferenceChanged(null, ""); 
     } 

     @Override 
     public void onResume() { 
      super.onResume(); 
      getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); 
     } 

     @Override 
     public void onPause() { 
      super.onPause(); 
      getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); 
     } 

     @Override 
     public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
      if (key.equals("switch_preference")) { 
       Toast.makeText(getActivity(), "Switch", Toast.LENGTH_LONG).show(); 
      } 
     } 
    } 
} 

ответ

2

в своем изменении разрешения/макет/файла activity_main.xml

<ListView android:id="@android:id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" /> 

в

<fragment android:id="@+id/fragment_settings" 
      android:layout_width="fill_parent" 
      android:name="yourpackagename.MainActivity$SettingsFragment" 
      android:layout_height="fill_parent" /> 

, а затем в файле MainActivity.java удалить следующую строку

getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit(); 
+0

Это именно то, что я хотите реализовать, но settings.xml не отображается. Однако приложение не рушится. любая помощь? –

Смежные вопросы