【问题标题】:Adding PreferenceScreen to linearlayout将 PreferenceScreen 添加到线性布局
【发布时间】:2014-02-07 08:43:30
【问题描述】:

您好,我是 Android 和 Java 新手,遇到了问题。我的问题是我正在尝试将 PreferenceScreen 添加到我的线性布局中,以便能够在 res/layout/activity_main.xml 的搜索栏上设置 setOnSeekBarChangeListener()。目前 PreferenceScreen 和 LinearLayout 被添加到视图中,但它们彼此重叠,这不是我想要的。相反,我希望 PreferenceScreen 代替我的布局文件中的 ListView。

res/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>

res/layout/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();
            }
        }
    }
}

【问题讨论】:

    标签: java android xml android-layout


    【解决方案1】:

    在您的 res/layout/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();
    

    【讨论】:

    • 这正是我想要实现的,但是 settings.xml 没有出现。该应用程序没有崩溃。有什么帮助吗?
    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多