
我需要在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访问列表视图所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)