2011-12-01 38 views
0
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); 
    }}} 

這裏是陣列上的文件 Listpreference推出新的活動

<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()。使用這些參數時,首選項屏幕會閃爍發送並返回到之前的屏幕,就像它正在啓動活動一樣,但如果需要進行更改,則不會保持足夠長的打開時間。這是我首次嘗試製作一個首選項屏幕,所以我不確定我是否錯過了某些東西,或者以完全錯誤的方式解決這個問題。

回答

0

查看您正在使用的API版本的APIDemos。有一個偏好活動的例子,有很好的解釋。您希望查看的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」的值時,它會啓動該意圖。

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); 
      }  
     } 
    } 
} 
+0

如果(listPref.equals( 「阿爾法利塔」)){ \t \t \t偏好PREF =新偏好(這); \t pref.setIntent(newIntent().setClass(this,Contents.class)); \t \t \t \t}這樣的事情?這工作,有點。它將允許您進行初始選擇,但不會在您執行時啓動活動。在進行選擇並編輯首選項屏幕後,它不會讓您返回到首選項屏幕。它閃爍起來,然後直接返回到前一個屏幕。我猜這是因爲它被打開的方式,只要屏幕看到選擇,它就會運行該活動。 – Jasonwilliams10

+0

我回過頭來看,這是我在上面的描述中描述的代碼。上面的代碼甚至沒有開始活動} else if(listPref.equals(「Tampa」)){ \t \t \t意圖myIntent = new Intent(Preferences.this,Contents.class); \t \t \t Preferences.this.startActivity(myIntent); – Jasonwilliams10

+0

PI已使用OnSharedPreferenceChangeListener工作的代碼更新了答案。問題在於,當您創建列表時,您正在檢查您的首選項列表的值。相反,您需要在列表值更改時作出響應。也許問題在於你使用了setOnSharedPreferenceChangeListener而不是registerOnSharedPreferenceChangeListener。無論如何,我測試了上面的代碼,它與意圖(在2.2模擬器中測試)一起工作。 – Alex