从PreferenceFragment访问ListView

3

我需要使用GoogleTV中的D-PAD来处理PreferenceFragment导航。为了做到这一点,我需要访问PreferenceFragment的ListView(第一个和最后一个元素)。

在下面的代码中,我能够访问列表视图的子项,但是它是空的。然而,如果我调试,我可以看到12个子项被创建,但它们为空,因此返回的计数为'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 screens:
<?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>

我能否获得至少第一个和最后一个元素的访问权限,即下面图片中的"Temperature"和"Terms & Conditions":

enter image description here

1个回答

7

以下是访问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;
    }

1
嗨,你在哪里设置addPreferencesFromResource(R.xml.settings)? - Naruto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接