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)
ListPreference不适用于适配器,它适用于字符串.见setEntries()和setEntryValues()
为了得到你ListPreference,请打电话findPreference()给你PreferenceActivity.投Preference你回来ListPreference.
只是在其他人出现时对此进行更新,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 方法下