【问题标题】:android - showing listView in PreferenceActivityandroid - 在 PreferenceActivity 中显示 listView
【发布时间】:2012-05-16 10:06:01
【问题描述】:

我希望在 PreferenceActivity 上显示一个 listView,类似于 android OS wifi-settings 用于网络列表的内容(例如 here,在图像的底部区域)。 但是,这样的东西不可用,所以我创建了一个扩展 Preference 的新类,而我在 onCreateView 中返回的只是一个 ListView 实例。

它起作用了,但是无论我对它的 layoutParams 做什么,也不管我对适配器做什么,listView 的大小都是恒定的,大约为单个项目。即使我在 onCreateView 中设置了适配器,它也具有完全相同的大小。

不仅如此,listView 也不能滚动,即使很明显它里面有多个项目。

当然,我希望使用与所有首选项相同的文本大小标准,以给人一种原生的感觉。

谁能告诉我可以做些什么来让它运作良好?

顺便说一句,该应用应该适用于 android API 10+(最低 10)。

【问题讨论】:

    标签: android android-listview preferenceactivity baseadapter


    【解决方案1】:

    如果您想要相同的外观/行为,您应该使用普通的PreferenceActivity 实现,并从代码动态地将新的preference items 添加到“列表”中(最终使用自定义渲染器)。

    这种显示的基本实现是:

    /**
     * This variable stands for the items with which you want to populate the list
     */
    final HashMap<String, String> networks = new HashMap<String, String>();
    
    final PreferenceCategory cat = new PreferenceCategory(getApplicationContext());
    cat.setTitle(R.string.wifinetworks); // holding "Wi-fi networks"
    for (final String networkTitle : networks.keySet())
    {
        final Preference pref = new Preference(getApplicationContext());
        pref.setTitle(networkTitle);
        pref.setSummary(networks.get(networkTitle));
        cat.addPreference(pref);
    }
    

    编辑:要向现有PreferenceActivity 添加自定义组件,您应该尝试addContentView 方法。来自onCreate

    final LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, 
            LayoutParams.WRAP_CONTENT);
    addContentView(buttonBar, params);
    

    【讨论】:

    • 所以你的意思是我根本不应该使用 listView ,而是在运行时简单地添加和删除项目?滚动功能呢?似乎当我添加一个 scrollView 时,“列表”的大小会缩小并保持相同的大小......滚动也不起作用
    • PreferenceActivity的屏幕确实已经有了滚动功能,所以你不需要再添加一个了。
    • 是否可以在正常活动中使用默认样式,如 preferenceActivity 上的?我需要有原生的感觉,但有些东西就是不存在的。例如,如果我需要在底部有按钮,在 listView 下方,我不能在这里使用它,因为你说所有项目都应该在同一个列表中,按下它们需要完全向下滚动列表。
    • 请看我的更新。 PreferenceActivity 仍然是一个具有基本布局的活动,使用 addContentView 方法可以向其中添加更多项目。或者您可以访问它的列表,并从 getListView().setLayoutParams(...); 更改其布局参数
    • 这是一个解决方法的好主意,但插入的视图设置在当前视图之上。因此,如果我选择以这种方式插入 listView,并且有首选项(例如 CheckBoxPreference),它将位于它们之上。也许布局是 FrameLayout 。
    【解决方案2】:

    好的,答案是将 setContentView 用于您想要的任何布局(包括您想要的任何视图),为首选项添加一个 listView ,并为此 listView 调用 bind 和 setAdapter。

    我通过查看其他解决方案找到了这个解决方案,比如这个: http://kmansoft.com/2011/08/29/implementing-long-clickable-preferences/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-07
      • 2017-08-15
      • 2016-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多