I have done what the previous answer suggested and implemented my own ListPreference based on Android source code. Below is my implementation that adds the OK button.
myPreferenceList.java
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.preference.ListPreference;
import android.util.AttributeSet;
public class myPreferenceList extends ListPreference implements OnClickListener{
private int mClickedDialogEntryIndex;
public myPreferenceList(Context context, AttributeSet attrs) {
super(context, attrs);
}
public myPreferenceList(Context context) {
this(context, null);
}
private int getValueIndex() {
return findIndexOfValue(this.getValue() +"");
}
@Override
protected void onPrepareDialogBuilder(Builder builder) {
super.onPrepareDialogBuilder(builder);
mClickedDialogEntryIndex = getValueIndex();
builder.setSingleChoiceItems(this.getEntries(), mClickedDialogEntryIndex, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
mClickedDialogEntryIndex = which;
}
});
System.out.println(getEntry() + " " + this.getEntries()[0]);
builder.setPositiveButton("OK", this);
}
public void onClick (DialogInterface dialog, int which)
{
this.setValue(this.getEntryValues()[mClickedDialogEntryIndex]+"");
}
}
Then you can use the class in your preference.xml as follow:
<com.yourApplicationName.myPreferenceList
android:key="yourKey"
android:entries="@array/yourEntries"
android:entryValues="@array/yourValues"
android:title="@string/yourTitle" />