Что я действительно хочу сделать, так это добавить экран предпочтений к существующему макету с другими элементами в нем (например, кнопкой) без использования устаревших подходов. Я посмотрел кнопку «добавить кнопку на экран предпочтений», и я получаю это на полурабочее время, используя устаревшие подходы.Ошибки PreferenceFragment на id.list, но не на id.content
У меня есть два xml-макета. Первый экран предпочтения (на данный момент PreferenceCategory является излишним) с 12 другими CheckBoxPreferences опущены для ясности:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:key="@string/specialization_prefs"
android:title="@string/select_specializations">
<CheckBoxPreference
android:key="@string/pulse_ox_key"
android:title="@string/pulse_ox"
android:defaultValue="true" />
<CheckBoxPreference
android:key="@string/bp_key"
android:title="@string/bp"
android:defaultValue="true" />
</PreferenceCategory>
Тогда у меня есть макет активности (PreferenceActivity или деятельности; кажется, не имеет значения):
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/specializations_layout" >
<Button
android:id="@+id/btn_done"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="Exit and Save" />
<ListView android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</RelativeLayout>
элемент управления ListView должен был быть фиктивной быть заменен PreferenceFragment, который я получил от предложения StackOverflow. Кнопка, которую я хочу сохранить.
Мой PreferenceFragment выглядит следующим образом:
public class SpecializationsFragment extends PreferenceFragment
{
@Override
public void onAttach(Activity specializationsActivity)
{
super.onAttach(specializationsActivity);
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.specializations);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
return super.onCreateView(inflater, container, savedInstanceState);
}
}
Наконец мой PreferenceActivity выглядит следующим образом:
public class SpecializationsActivity extends PreferenceActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.specializations_layout);
getFragmentManager().beginTransaction()
.replace(android.R.id.list, new SpecializationsFragment())
.commit();
}
}
Если я заменю 'android.R.id.list' с «android.R. id.content 'это своего рода работы. Я вижу свою кнопку, но мой экран настроек прокручивается прямо над ним. Это то, что я получаю, когда я следую решению устаревшей кнопки. Если я использую «android.R.id.list» вместо этого, приложение аварийно скажет, что «addView (View) не поддерживается в AdapterView.
Я также искал эту проблему. Что мне не хватает? в настоящее время ничего не делает, кроме графического интерфейса. Что мне нужно добавить, чтобы отобразить кнопку, и экран предпочтений для прокрутки в пространстве под ним, как это предполагается сделать в собственном «фрагменте»? Я думал, что это было целое (да, они действительно работают достаточно хорошо, пока экраны предпочтений отсутствуют). Также не имеет значения, используя метод «добавить» в сравнении с методом «replace».