android– 从PreferenceFragment访问列表视图

android– 从PreferenceFragment访问列表视图,第1张

概述我需要在GoogleTV中使用D-PAD处理PreferenceFragment导航.为此,我需要访问PreferenceFragment的ListView(第一个和最后一个元素).在下面的代码中,我能够访问列表视图的子项,但它是空的.然而,如果我调试我可以看到12个孩子被创建,但他们是null因此计数返回为’0′@Overridepubl

我需要在GoogleTV中使用D-PAD处理PreferenceFragment导航.为此,我需要访问PreferenceFragment的ListVIEw(第一个和最后一个元素).

在下面的代码中,我能够访问列表视图的子项,但它是空的.然而,如果我调试我可以看到12个孩子被创建,但他们是null因此计数返回为’0′

@OverrIDe public VIEw onCreateVIEw(LayoutInflater inflater, VIEwGroup container,            Bundle savedInstanceState){    //Log.d(DEBUG_TAG, "onCreateVIEw");    VIEw v = inflater.inflate(R.layout.settings_tile, null);    closeBtn = (ImageVIEw) v.findVIEwByID(R.ID.settingsClosebutton);    ListVIEw lv = (ListVIEw) v.findVIEwByID(androID.R.ID.List);    lv.getChildCount();    return v;}

下面是PreferenceScreen的xml …注意它是Pref屏幕中的Pref屏幕:

<?xml version="1.0" enCoding="utf-8"?><PreferenceScreen  xmlns:androID="http://schemas.androID.com/apk/res/androID"  androID:key="main_pref">      <Preferencecategory            androID:title="@string/units">           <ListPreference               androID:key="pref_unit_temp"               androID:title="@string/temperature"               androID:defaultValue="@string/default_metric"               androID:entrIEs="@array/pref_temp_units"               androID:entryValues="@array/pref_temp_units_values"               androID:dialogtitle="@string/units"               androID:layout="@layout/settings_item"               />    </Preferencecategory>    <Preferencecategory        androID:title="@string/advanced">        <ListPreference            androID:key="pref_speed"            androID:title="@string/speed"            androID:entrIEs="@array/pref_speed"            androID:entryValues="@array/pref_speed_values"            androID:defaultValue="@string/default_metric"            androID:layout="@layout/settings_item"/>        <ListPreference            androID:key="pref_measurement"            androID:title="@string/measurement"            androID:entrIEs="@array/pref_measurement"            androID:entryValues="@array/pref_measurement_values"            androID:defaultValue="@string/default_metric"            androID:layout="@layout/settings_item"/>        <ListPreference            androID:key="pref_time"            androID:title="@string/time_format"            androID:entrIEs="@array/pref_time"            androID:entryValues="@array/pref_time_values"            androID:defaultValue="@string/default_metric"            androID:layout="@layout/settings_item"/>        <ListPreference            androID:key="pref_date"            androID:title="@string/date_format"            androID:entrIEs="@array/pref_date"            androID:entryValues="@array/pref_date_values"            androID:defaultValue="@string/default_metric"            androID:layout="@layout/settings_item"/>    </Preferencecategory>        <PreferenceScreen                androID:title="@string/terms_conditions"                androID:summary=""                androID:layout="@layout/settings_item">            <intent androID:action="androID.intent.action.VIEW"                    androID:data="http://www.accuweather.com/m/EulA.aspx" />        </PreferenceScreen>            </Preferencecategory></PreferenceScreen>

我是否可以访问至少第一个和最后一个元素,即“温度”和“条款和条件”,如下图所示:

解决方法:

以下是访问ListvIEw和使用dpad控制的解决方案:

@OverrIDe     public VIEw onCreateVIEw(LayoutInflater inflater, VIEwGroup container,                Bundle savedInstanceState){        //Log.d(DEBUG_TAG, "onCreateVIEw");        VIEw v = inflater.inflate(R.layout.settings_tile, null);        closeBtn = (ImageVIEw) v.findVIEwByID(R.ID.settingsClosebutton);        final ListVIEw lv = (ListVIEw) v.findVIEwByID(androID.R.ID.List);        lv.setonKeyListener(new OnKeyListener() {            @OverrIDe            public boolean onKey(VIEw v, int keyCode, KeyEvent event) {                // Todo auto-generated method stub                if (event.getAction() == KeyEvent.ACTION_DOWN) {                    switch(keyCode) {                        case KeyEvent.KEYCODE_DPAD_DOWN:                            return !(lv.getSelectedItemposition() < lv.getCount() - 1);                        case KeyEvent.KEYCODE_DPAD_UP:                            return lv.getSelectedItemposition() == 1;                        case KeyEvent.KEYCODE_DPAD_RIGHT:                            return true;                        }                    return false;                }                return false;            }        });        return v;    }
总结

以上是内存溢出为你收集整理的android – 从PreferenceFragment访问列表视图全部内容,希望文章能够帮你解决android – 从PreferenceFragment访问列表视图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1109658.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存