Question

i create preference screens dynamically according to my dynamic array. this is done in a for loop. to every screen objects, i add onclick listeners. but first one is only working. what is the problem?

here my code.

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;
            }
    }

when i run this it creates preference screens according to device_list array elements. but onclick listener work only for first screen. what i did wrong?

thank you.

Was it helpful?

Solution

In your case, only one object of PreferenceScreen exists. You should use a list of 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());
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top