点击侦听器上只有一个首选项正在运行

时间:2014-01-27 11:09:50

标签: java android onclicklistener android-preferences

我根据动态数组动态创建首选项屏幕。这是在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监听器仅适用于第一个屏幕。我做错了什么?

谢谢。

1 个答案:

答案 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());
}