Listpreference启动新活动

时间:2011-12-01 16:13:15

标签: android

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.preference.PreferenceActivity;
public class Preferences extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.preferences);


    SharedPreferences SP = PreferenceManager
            .getDefaultSharedPreferences(getBaseContext());

    String listPref = SP.getString("listPref", "No City Selected");
    SP.getString("listPref", "No City Selected");
    SP.contains(listPref);

    if (listPref == "Aplpharetta") {
        Intent myIntent = new Intent(Preferences.this, Contents.class);
        Preferences.this.startActivity(myIntent);

    } else if ("Greenville".equals("Greenvile")) {
        Intent myIntent = new Intent(Preferences.this, Contents.class);
        Preferences.this.startActivity(myIntent);

    } else if   ("Houston".equals("Houston")) {     
        Intent myIntent = new Intent(Preferences.this, Contents.class);
        Preferences.this.startActivity(myIntent);
    }}}

这是Arrays文件          

<string-array name="listArray">
    <item>Alpharetta</item>
    <item>Greenville</item>
    <item>Houston</item>
    <item>Tampa</item>
</string-array>

    <string-array name="listValues">
    <item>Alpharetta</item>
    <item>Greenville</item>
    <item>Houston</item>
    <item>Tampa</item>
</string-array>
</resources>

我遇到的问题是在选择listpreference时启动活动。我尝试了上面列出的两种方法,列表允许您选择项目,但不会触发其他活动启动。由于信息在应用程序的另一部分中填充,因此阵列列表设置为没有整数。我尝试过setOnPreferenceChangeListener()和setOnPreferenceClickListener()。使用这些功能后,首选项屏幕会闪烁显示发送并返回上一个屏幕,就像启动活动一样,但如果需要进行更改,则不会保持打开状态。这是我第一次尝试制作首选屏幕,因此我不确定我是否遗漏了某些内容或者以完全错误的方式解决这个问题。

1 个答案:

答案 0 :(得分:0)

在APIDemos中查看您正在使用的API版本。有一个Preference Activity示例,有很好的解释。您想要查看的2个文件是:Preferences.FromCode.java和com.example.android.apis.app中的PreferencesFromXML.java。

简而言之,您需要为所需的特定偏好注册意图。

Preference pref = new Preference(this);
pref.setIntent(new Intent().setClass(this, <Activity>.class));

这样,当点击首选项时,它会自动触发您为其注册的活动。

<强>更新 我已经快速创建了活动,并在下面测试了代码。你说你已经尝试过OnChangeListener,但由于某种原因它没有用完。这可以使用OnSharedPreferenceChangeListener,并在您更改“list_preference”的值时启动intent。

public class ListPrefTestActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);


        SharedPreferences SP = PreferenceManager
                .getDefaultSharedPreferences(getBaseContext());


        // Register OnChangeListener
        SP.registerOnSharedPreferenceChangeListener(this);
    }

    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
            String key) {

        //Make sure the item changed was the list_preference 
        if(key.equals("list_preference")) {
            //Get the value from the list_preference with default: "Nothing"
            String value = sharedPreferences.getString(key, "Nothing");

            // If the value not the default, then open google.com using intent.
            if(!value.equals("Nothing")) {
                String url = "http://www.google.com";
                Intent i = new Intent(Intent.ACTION_VIEW);
                i.setData(Uri.parse(url));
                startActivity(i);
            }       
        }
    }
}