我根据动态数组动态创建首选项屏幕。这是在for循环中完成的。对于每个屏幕对象,我添加onclick监听器。但第一个只是工作。有什么问题?
这是我的代码。
MenuActivity.java
public static ArrayList<Details> device_list;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preference);
createPreference();
}
private void createPreference() {
devicePref = (PreferenceScreen)getPreferenceScreen().findPreference("Manage Devices");
devicePref.removeAll();
if (MainActivity.device_list.size()!=0) {
for (int i = 0; i < MainActivity.device_list.size(); i++) {
PreferenceScreen screen= getPreferenceManager().createPreferenceScreen(this);
screen.setTitle(device_list.get(i).getName());
screen.setKey(device_list.get(i).getCust_id());
screen.setSummary(.device_list.get(i).getNic()+" "+device_list.get(i).getNumber());
screen.setOnPreferenceClickListener(new DevicePreferenceListner());
devicePref.addPreference(screen);
}
}else {
Toast.makeText(MenuActivity.this, "There is No any users", Toast.LENGTH_LONG).show();
}
}
private class DevicePreferenceListner implements OnPreferenceClickListener{
@Override
public boolean onPreferenceClick(Preference preference) {
//do some stuff....
return true;
}
}
当我运行它时,它根据device_list数组元素创建首选项屏幕。但onclick监听器仅适用于第一个屏幕。我做错了什么?
谢谢。答案 0 :(得分:1)
在您的情况下,只存在一个PreferenceScreen对象。您应该使用PreferenceScreen列表:
List <PreferenceScreen> prefScreens = new ArrayList<PreferenceScreen> ();
for (int i = 0; i < MainActivity.device_list.size(); i++)
{
prefScreens.add(new PreferenceScreen(getPreferenceManager().createPreferenceScreen(this)));
prefScreens.get(i).setOnPreferenceClickListener(new DevicePreferenceListner());
}