質問

GoogleTVでD-PADを使用してPreferenceFragment Navigationを処理する必要があります。そのためには、PreferenceFragmentのListView(最初と最後の要素)にアクセスする必要があります。

以下のコードでは、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>

以下の画像に示すように、少なくとも「温度」と「利用規約」である最初と最後の要素にアクセスできますか?

enter image description here

役に立ちましたか?

解決

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;
    }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top