我想让达到这样一个功能,按下MyActivity 的view里头的一个button,然后弹出像下图的一个对话框。我看到android里头都是用PreferenceActivity。我应该是让MyActivity 继承PreferenceActivity,还是应该在button的onClick()函数里头创建一个PreferenceActivity呢?
我试了试让MyActivity 继承PreferenceActivity,效果如下,那我就没法定制我的MyActivity界面了,PreferenceActivity里头貌似必须要有个listView,是这样的么?
点击“area_preference_key”后
代码如下:
area_preference.xml<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
 
    <ListPreference
        android:key="area_preference_key" 
        android:title="area_preference_key"
        android:entries="@array/ver_count_entry_text"
        android:entryValues="@array/ver_count_entry_value"
        android:persistent="true" />
 
</PreferenceScreen>
MyActivity.java
public class MyActivityextends PreferenceActivity{
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //这里我能设置另外的layout么?如果可以如何在控制我的layout中那个view click之后弹出listpreference 的对话框
        addPreferencesFromResource(R.layout.area_preference);

    }
   
}
就这个点了选中其中一向还报错, ListPreference真是难用。
D/AndroidRuntime(  227): Shutting down VM
W/dalvikvm(  227): threadid=3: thread exiting with uncaught exception (group=0x4001aa28)
E/AndroidRuntime(  227): Uncaught handler: thread main exiting due to uncaught exception
E/AndroidRuntime(  227): java.lang.NullPointerException
E/AndroidRuntime(  227):        at android.preference.ListPreference.onDialogClosed(ListPreference.java:218)
E/AndroidRuntime(  227):        at android.preference.DialogPreference.onDismiss(DialogPreference.java:359)
E/AndroidRuntime(  227):        at android.app.Dialog$ListenersHandler.handleMessage(Dialog.java:1007)
E/AndroidRuntime(  227):        at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(  227):        at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(  227):        at android.app.ActivityThread.main(ActivityThread.java:4203)
E/AndroidRuntime(  227):        at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(  227):        at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(  227):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
E/AndroidRuntime(  227):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
E/AndroidRuntime(  227):        at dalvik.system.NativeStart.main(Native Method)

解决方案 »

  1.   

    这个可以用一个dialog 或者用context menu办法很多。 我说的这俩种还比较好用。 可以在你的Activity里面使用。 具体用法参照API demo。
      

  2.   

    public interface
    ContextMenuExtension of Menu for context menus providing functionality to modify the header of the context menu.Context menus do not support item shortcuts and item icons.
    这个是指里头每一个item都不能有图标么?
    To show a context menu on long click, most clients will want to call registerForContextMenu(View) and override onCreateContextMenu(ContextMenu, View, ContextMenu.ContextMenuInfo).
      

  3.   

    如果LZ想在弹出的Activity里面自己布局 ,完全可以就做成Activity , 不用派生成PreferenceActivity , 把那个activity的主题设置为Dialog就行了 ,然后自己再做布局就OK咯
      

  4.   

    自己实现一个这样的布局,把这个布局放到Dialog中就OK了,
      

  5.   

    ListPreference就可以啦 Values里面定义一下Array就可以了<?xml version="1.0" encoding="utf-8"?>
    <resources>
    <string-array name="entries_list_preference">
        <item>one</item>
        <item>two</item>
        <item>three</item>
    </string-array>
    <string-array name="entriesvalue_list_preference">
        <item>1</item>
        <item>2</item>
        <item>3</item>
    </string-array>
    </resources>
      

  6.   

    如果实现上述效果用DialogInference怎么做?且存储的是Long型,不是String类型
      

  7.   

    继承PreferenceActivity,添加ListPreference,就行了
      

  8.   

    感觉你要的就是一个android的下拉框,建议你用spiner