向首选项添加操作

时间:2013-12-19 14:02:22

标签: android android-preferences

我是Android Preferences的新用户,我正在使用它来设置菜单,我只是有几个问题。我查看了API网站,但找不到向他们添加操作的方法。我有Activity

public class SettingsActivity extends PreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit();
}

public static class MyPreferenceFragment extends PreferenceFragment
{
    @Override
    public void onCreate(final Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        PreferenceManager.setDefaultValues(getActivity(), R.xml.preferences, false);
        addPreferencesFromResource(R.xml.preferences);
    }
}
}

工作正常,它显示我的xml PreferenceScreen页面,其中包含4个Preference标签。我的问题是如何在点击这些偏好时添加动作。例如,我希望显示一个单独的弹出窗口,我可以在其中更改数值,并在每次打开应用程序时保存该值。如果有人可以提供一个例子或其他东西,我会非常感激

3 个答案:

答案 0 :(得分:2)

  

我希望显示一个单独的弹出窗口,我可以在其中更改数值并保存

这很容易,您只需要在您的xml文件中将该首选项设为EditTextPreference,如下所示:

<EditTextPreference 
 android:title="@string/title"
 android:key="preferenceKey" />

您可以对其进行更多自定义:如果您只想要整数android:numeric="integer",则需要设置最大长度android:maxLength="3"和默认值android:defaultValue="10"。您不必在Java类中执行任何操作


  

如何在点击这些偏好时添加操作

如果您想添加更复杂的操作,请使用Preference.OnPreferenceClickListener。您可以像这样使用它:

Preference preference = // some preference
preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener(){
    @Override
    public boolean onPreferenceClick(Preference p){
        //do something
        return false;
    }
});

您可以在this question找到更多信息。希望这有帮助

PS。如果你想自定义偏好(即不仅是动作onClick,还有布局等),你应该考虑创建一个自定义偏好,如另一个答案所述。

答案 1 :(得分:0)

听起来您正在尝试做的事情将通过创建自定义首选项来妥善处理。 Android文档有一个很好的教程:http://developer.android.com/guide/topics/ui/settings.html#Custom

答案 2 :(得分:0)

根据您的要求,您可以通过意图标记的意图。下面是我在Menu.java中的示例代码:您也可以按照开发人员教程:http://developer.android.com/guide/topics/ui/settings.html#Custom

public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        switch(item.getItemId()){
            case R.id.about:
                /*Intent aboutIntent = new Intent(Menu.this, About.class);
                startActivity(aboutIntent);*/

                Intent aboutIntent = new Intent("com.example.myfirstapp.ABOUT");
                startActivity(aboutIntent);
            break;
            case R.id.preference:
                Intent prefsIntent = new Intent("com.example.myfirstapp.PREFS");
                startActivity(prefsIntent);
            break;
            case R.id.exit:
                finish();
                break;
        }
        return false;
    }

About.java中的代码

public class About extends Activity {
    TextView TV1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.about);
        TV1 = (TextView) findViewById (R.id.textView1);
    }
}