ListGroupPreference: Allow to modify items

This commit is contained in:
Jules Aguillon 2023-07-30 23:34:48 +02:00
parent dad5f57a03
commit 9bd8b08544

View File

@ -113,9 +113,15 @@ public abstract class ListGroupPreference extends PreferenceGroup
set_values(_values, true); set_values(_values, true);
} }
void remove_item(String v) void change_item(int i, String v)
{ {
_values.remove(v); _values.set(i, v);
set_values(_values, true);
}
void remove_item(int i)
{
_values.remove(i);
set_values(_values, true); set_values(_values, true);
} }
@ -152,9 +158,7 @@ public abstract class ListGroupPreference extends PreferenceGroup
int i = 0; int i = 0;
for (String v : _values) for (String v : _values)
{ {
Item item = this.new Item(getContext(), v, allow_remove_item); addPreference(this.new Item(getContext(), i, v, allow_remove_item));
item.setTitle(label_of_value(v, i));
addPreference(item);
i++; i++;
} }
_add_button = on_attach_add_button(_add_button); _add_button = on_attach_add_button(_add_button);
@ -165,16 +169,30 @@ public abstract class ListGroupPreference extends PreferenceGroup
class Item extends Preference class Item extends Preference
{ {
final String _value; final String _value;
final int _index;
public Item(Context ctx, String value, boolean allow_remove) public Item(Context ctx, int index, String value, boolean allow_remove)
{ {
super(ctx); super(ctx);
_value = value; _value = value;
_index = index;
setPersistent(false); setPersistent(false);
setTitle(label_of_value(value, index));
if (allow_remove) if (allow_remove)
setWidgetLayoutResource(R.layout.pref_listgroup_item_widget); setWidgetLayoutResource(R.layout.pref_listgroup_item_widget);
} }
@Override
protected void onClick()
{
select(new SelectionCallback() {
public void select(String value)
{
change_item(_index, value);
}
});
}
@Override @Override
protected View onCreateView(ViewGroup parent) protected View onCreateView(ViewGroup parent)
{ {
@ -185,7 +203,7 @@ public abstract class ListGroupPreference extends PreferenceGroup
@Override @Override
public void onClick(View _v) public void onClick(View _v)
{ {
remove_item(_value); remove_item(_index);
} }
}); });
return v; return v;