是否可以从适配器加载ListPreference项?

Bra*_*ein 8 arrays android adapter preferences

我正着手为我的应用创建设置活动.我已经定义了PreferenceActivity一个很好的布局,包括一个ListPreference用户选择蓝牙设备的对象.我在动态填充列表时遇到问题.

我想填充ListPreference数组适配器的值(我将创建并填充相关的蓝牙设备名称).

如果这是一个微调视图,我可以打电话setAdapter().但是对于ListPreference对象我无法弄清楚如何附加适配器(findviewByID不会从View To转换ListPreference,所以我甚至无法获得对象的句柄).

我想附加一个适配器,然后使用值填充适配器,这反过来将填充ListPreferencewith值.

ge0*_*0rg 10

对于蓝牙设备列表的特殊情况,您可以使用以下类:

package de.duenndns;

import android.bluetooth.*;
import android.content.Context;
import android.preference.ListPreference;
import android.util.AttributeSet;

import java.util.Set;

public class BluetoothDevicePreference extends ListPreference {

    public BluetoothDevicePreference(Context context, AttributeSet attrs) {
        super(context, attrs);

        BluetoothAdapter bta = BluetoothAdapter.getDefaultAdapter();
        Set<BluetoothDevice> pairedDevices = bta.getBondedDevices();
        CharSequence[] entries = new CharSequence[pairedDevices.size()];
        CharSequence[] entryValues = new CharSequence[pairedDevices.size()];
        int i = 0;
        for (BluetoothDevice dev : pairedDevices) {
            entries[i] = dev.getName();
            if (entries[i] == null) entries[i] = "unknown";
            entryValues[i] = dev.getAddress();
            i++;
        }
        setEntries(entries);
        setEntryValues(entryValues);
    }

    public BluetoothDevicePreference(Context context) {
        this(context, null);
    }

}
Run Code Online (Sandbox Code Playgroud)

它可以直接从您的prefs XML中包含,以将MAC存储为prefs字符串:

<de.duenndns.BluetoothDevicePreference
    android:key="bluetooth_mac"
    android:title="Bluetooth Device"
    android:dialogTitle="Choose Bluetooth Device" />
Run Code Online (Sandbox Code Playgroud)


Com*_*are 7

ListPreference不适用于适配器,它适用于字符串.见setEntries()setEntryValues()

为了得到你ListPreference,请打电话findPreference()给你PreferenceActivity.投Preference你回来ListPreference.


DRi*_*ing 5

只是在其他人出现时对此进行更新,ge0rg 答案有效但对其进行了一些更改以考虑多种偏好,而不仅仅是蓝牙偏好,而且如果他们没有设置任何配对设备,则不会出现错误带有空数组。

ListPreference BTList = (ListPreference) findPreference("your preference key");
    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
    CharSequence[] entries = new CharSequence[1];
    CharSequence[] entryValues = new CharSequence[1];
    entries[0] = "No Devices";
    entryValues[0] = "";
    if(pairedDevices.size() > 0){
        entries = new CharSequence[pairedDevices.size()];
        entryValues = new CharSequence[pairedDevices.size()];
        int i=0;
        for(BluetoothDevice device : pairedDevices){
            entries[i] = device.getName();
            entryValues[i] = device.getAddress();
            i++;
        }
    }
    BTList.setEntries(entries);
    BTList.setEntryValues(entryValues);
Run Code Online (Sandbox Code Playgroud)

`希望这对某人有帮助......哦,这被放在偏好活动的 onCreate 方法下