2012-08-08 69 views
1

我試圖按照設置上的Android API指南,更具體地說,我試圖通過以下this part of the text創建this number picker dialog。但我無法讓它工作。當我按下應該啓動自定義對話框的首選項時,什麼都不會發生。我認爲我必須在某個地方打電話,但我無法弄清楚。從SettingsFragment打開自定義對話框

這裏是我的MainActivity.java:

public class MainActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_activity_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.menu_settings_fragment: 
     // Display the fragment as the main content 
     Intent i = new Intent(); 
     i.setClass(this, SettingsActivity.class); 
     startActivityForResult(i, 0); 
     return true; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 
} 

而且它很好地啓動SettingsActivity.java。 SettingsActivity.java:

public class SettingsActivity extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Display the fragment as the main content. 
    getFragmentManager().beginTransaction() 
      .replace(android.R.id.content, new SettingsFragment()).commit(); 
} 
} 

業大SettingsFragment.java:

public class SettingsFragment extends PreferenceFragment { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Load the preferences from an XML resource 
    addPreferencesFromResource(R.xml.preferences); 
} 
} 

這將啓動的preferences.xml:

<?xml version="1.0" encoding="utf-8"?> 

<PreferenceCategory 
    android:key="pref_key_category_settings" 
    android:title="@string/pref_category1_title" > 
    <CheckBoxPreference 
     android:defaultValue="true" 
     android:key="pref_checkbox" 
     android:summary="@string/pref_checkbox_summ" 
     android:title="@string/pref_sync" /> 
    <CheckBoxPreference 
     android:defaultValue="true" 
     android:key="pref_checkbox_choose_int" 
     android:summary="@string/pref_checkbox_choose_string_summ" 
     android:title="@string/pref_choose_string" /> 

    <Preference 
     android:dependency="pref_checkbox_choose_int" 
     android:key="pref_key_num_scroller" 
     android:summary="@string/pref_num_scroller_summ" 
     android:title="@string/pref_num_scroller"/> 
</PreferenceCategory> 

正如我所說:當我點擊pref_key_num_scroller時沒有任何反應。

我對如何調用NumberPickerPreference.java不知道:

public class NumberPickerPreference extends DialogPreference { 

public NumberPickerPreference(Context context, AttributeSet attrs) { 
    super(context, attrs); 

    setDialogLayoutResource(R.layout.numberpicker_dialog); 
    setPositiveButtonText(android.R.string.ok); 
    setNegativeButtonText(android.R.string.cancel); 
} 
} 
+0

你試過只是改變偏好您的XML中的pref_key_num_scroller的NumberPickerPreference? – ekholm 2012-08-08 12:00:57

+0

我將它添加爲答案,因爲我認爲應該可以工作 – ekholm 2012-08-08 12:26:00

+0

你從哪裏得到R.layout.numberpicker_dialog?任何你願意分享的機會,我想從'設置'例子中完全相同的一個 – Matt 2013-02-18 17:31:45

回答

2

改變優先級來NumberPickerPreference在你的XML,使用它的全名:

<com.something.settings.NumberPickerPreference 
    android:dependency="pref_checkbox_choose_int" 
    android:key="pref_key_num_scroller" 
    android:summary="@string/pref_num_scroller_summ" 
    android:title="@string/pref_num_scroller"/> 
+0

非常不合時宜,那是行不通的。我崩潰,說加載類NumberPickerPreference時發生錯誤。如果我嘗試加載不存在的類,它也會給出相同的錯誤。 – ringkjob 2012-08-08 21:21:04

+0

我想通了!你幾乎是對的。我需要將我的完整路徑添加到標記:com.something.settings.NumberPickerPreference。如果你更新,我會接受你的答案。謝謝! – ringkjob 2012-08-08 21:31:31

+0

你說得對,我更新了答案。感謝您指出! – ekholm 2012-08-09 06:36:08