Ho un AlertDialog
con solo un po 'di testo, un NumberPicker
, un OK e un Annulla.Tastiera di cattura 'Fatto' per NumberPicker
package org.dyndns.schep.example;
import android.os.Bundler;
import android.view.View;
import android.widget.NumberPicker;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
public class FooFragment extends DialogFragment {
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mParent = (MainActivity) activity;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setPositiveButton(android.R.string.ok,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
mParent.setFoo(foo());
}
})
.setNegativeButton(android.R.string.cancel, null);
View view = getActivity().getLayoutInflater.inflate(
R.layout.dialog_foo, null);
mPicker = (NumberPicker) view.findViewById(R.id.numberPicker1);
mPicker.setValue(mParent.getFoo());
builder.setView(view);
return builder.create();
}
public int foo() {
return mPicker.getValue();
}
private MainActivity mParent;
private NumberPicker mPicker;
}
(Questa finestra di dialogo ancora non fare le cose che deve preservare lo stato in pausa e riprendere, lo so.)
vorrei l'azione "Fatto" sulla tastiera virtuale o altro IME per chiudere la finestra di dialogo come se fosse stato premuto "OK", poiché c'è solo un widget da modificare.
Sembra che il modo migliore per gestire un IME "Fatto" di solito è setOnEditorActionListener
su un TextView
. Ma non ho alcuna variabile TextView
e NumberPicker
non espone ovviamente alcun TextView
o callback di editor simili. (Forse NumberPicker
contiene un TextView
con un ID costante potrei cercare usando findViewById
?)
NumberPicker.setOnValueChangedListener
venga attivato l'azione "Fatto", ma spara anche quando si tocca o sfogliando l'elenco dei numeri, che sicuramente non dovrebbe chiudere la finestra di dialogo.
In base alla domanda this, ho provato a verificare setOnKeyListener
, ma quell'interfaccia non si attivava affatto quando si utilizzava la tastiera virtuale. Non è una sorpresa totale, dal momento che la documentazione di KeyEvent
suggerisce che è pensata più per gli eventi hardware, e nelle recenti API la tastiera virtuale non le invierà affatto.
Come posso collegare l'IME "Fatto" all'azione "OK" della mia finestra di dialogo?
Edit: Dagli sguardi della sorgente, un layout NumberPicker
contiene una EditText
, ma la sua identificazione è id/numberpicker_input
nella confezione com.android.internal
. Usarlo non sarebbe facile, ed è ovviamente scoraggiato. Ma sembra che ci potrebbero essere solo modi di hacking per ottenere il comportamento che voglio.
Hai provato un selettore di numeri personalizzato compatibile con le versioni precedenti di Android. Sono sicuro che avrai accesso al loro id 'EditText'. Puoi controllare questo: https://github.com/SimonVT/android-numberpicker – Naveen