Saya memiliki EditText-Field dan mengatur OnFocusChangeListener untuk itu. Ketika kehilangan fokus, sebuah metode dipanggil, yang memeriksa nilai EditText dengan satu di database. Jika nilai pengembalian metode ini benar, bersulang ditampilkan dan fokus harus kembali pada EditText lagi. Fokus harus selalu kembali pada EditText dan keyboard akan ditampilkan, sampai nilai pengembalian metode salah.
EDIT: Saya pikir, saya belum membuat masalah nyata saya menjadi sangat jelas: Tidak ada Item lain di Layar yang dapat diedit, sampai nilai EditText diedit ke nilai, yang membuat metode "checkLiganame (liganame) "return false. Hanya Bidang-EditTeks yang dapat diedit.
ini kode saya (yang tidak berfungsi untuk saya):
final EditText Liganame = (EditText) findViewById(R.id.liganame);
Liganame.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
String liganame = Liganame.getText().toString();
if (checkLiganame(liganame)) {
Toast toast = Toast.makeText(CreateTableActivity.this,
"Dieser Liganame ist bereits vergeben",
Toast.LENGTH_SHORT);
toast.show();
Liganame.requestFocus();
}
}
dan metodenya:
public boolean checkLiganame(String liganame) {
boolean found = false;
DatabaseHelper databaseHelper = new DatabaseHelper(this);
SQLiteDatabase db = databaseHelper.getReadableDatabase();
Cursor cursor = db.query("liga", new String[] { "liganame" },
"liganame = '" + liganame + "'", null, null, null, null);
Log.i("Liganame: ", String.valueOf(cursor));
db.close();
if (cursor != null) {
found = true;
}
return found;
}
Kode ini mengarah ke hasil berikut: Setelah EditText kehilangan fokus, fokus melompat kembali ke EditText, tetapi saya tidak dapat mengedit teks lagi.
EDIT2: Mengubah kode saya. Skenario:
Saya klik pada EditText pertama dan meletakkan String di dalamnya, yang sudah ada di database. Roti panggang ditampilkan. Sekarang saya tidak bisa lagi mengedit String saya. Saya klik "berikutnya" pada keyboard dan fokusnya tetap pada EditText pertama. Saya mencoba mengedit String saya, tetapi tidak ada yang terjadi. Alih-alih, String saya yang baru muncul di EditText kedua. Saya mengklik panah belakang perangkat saya dan mengklik kembali EditText pertama dan kedua -> tidak ada keyboard yang ditampilkan.
Ini kode baru saya:
public class CreateTableActivity extends Activity implements
OnFocusChangeListener {
private EditText Liganame, Mannschaftsanzahl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.create_league);
Liganame = (EditText) findViewById(R.id.liganame);
Liganame.setOnFocusChangeListener(this);
Mannschaftsanzahl = (EditText) findViewById(R.id.mannschaftsanzahl);
Mannschaftsanzahl.setOnFocusChangeListener(this);
final Button save_button = (Button) findViewById(R.id.create_tabelle_speichern_button);
OnClickListener mCorkyListener = new OnClickListener() {
public void onClick(View v) {
ButtonClick();
}
};
save_button.setOnClickListener(mCorkyListener);
}
@Override
public void onFocusChange(View v, boolean hasFocus) {
String liganame = Liganame.getText().toString();
if (checkLiganame(liganame)) {
if (Liganame.requestFocus()) {
getWindow()
.setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
Mannschaftsanzahl.clearFocus();
Toast.makeText(CreateTableActivity.this,
"Dieser Liganame ist bereits vergeben",
Toast.LENGTH_SHORT).show();
}
}
}
sumber
Jawaban:
Cukup letakkan baris ini di
onCreate()
Ini bekerja untuk saya, semoga membantu
sumber
Meminta fokus tidak cukup untuk menampilkan keyboard.
Untuk mendapatkan fokus dan menampilkan keyboard Anda akan menulis sesuatu seperti ini:
EDIT: Menambahkan info tambahan ke jawaban setelah metode checkLiganame ditambahkan.
Dalam metode checkLiganame Anda memeriksa apakah kursornya nol. Kursor akan selalu mengembalikan objek, jadi centang untuk null tidak melakukan apa-apa. Namun masalahnya ada di jalur
db.close();
Ketika Anda menutup koneksi database,
Cursor
menjadi tidak valid dan kemungkinan besar dibatalkan.Jadi tutup basis data setelah Anda mengambil nilainya.
Alih-alih memeriksa kursor untuk null, Anda harus memeriksa apakah jumlah baris yang dikembalikan lebih dari 0: jika (cursor.getCount ()> 0) dan kemudian atur boolean Anda menjadi true jika demikian.
EDIT2: Jadi inilah beberapa kode untuk membuatnya berfungsi. EDIT3: Maaf saya menambahkan kode yang salah ...; S
Pertama, Anda perlu menghapus fokus jika orang lain
EditText
mendapatkan fokus. Ini bisa dilakukan denganmyEditText.clearFocus()
. Kemudian di onFocusChangeListener Anda seharusnya tidak terlalu peduli apakah pertama-tamaEditText
memiliki fokus atau tidak, sehingga onFocusChangeListener dapat terlihat seperti ini:Ganti cek pertama
if(liganame.length() == 0)
dengan cek Anda sendiri, maka itu harus bekerja. Perhatikan, bahwa semua tampilan EditText harus diaturonFocusChangeListener
ke pendengar yang sama seperti yang saya lakukan dalam contoh.sumber
Kode Darwind tidak menampilkan keyboard.
Ini bekerja untuk saya:
jika keyboard tidak muncul, coba paksa:
sumber
Ini mengubah fokus EditText ketika tombol diklik:
sumber
Ini bekerja dari saya:
Untuk menyembunyikan:
sumber
Inilah yang bekerja untuk saya, menetapkan fokus dan juga menunjukkan keyboard
sumber
setFocusable
membutuhkan API 26. JugasetFocusableInTouchMode
tidak diperlukan dalam kasus saya.Jika kita membuat EditText secara dinamis maka kita harus mengatur requestFocus () seperti yang diberikan di bawah ini.
Jika sudah kita mendeklarasikan komponen dalam tampilan xml maka kita harus menemukannya dan kita dapat fokus seperti yang diberikan di bawah ini.
Ini hanya menetapkan fokus ke komponen EditText yang sesuai.
sumber
sumber
sumber
sumber
Anda dapat melakukan ini dengan satu baris:
sumber
Untuk Xamarin. Android saya telah membuat ekstensi ini.
sumber
silakan coba kode ini pada manifes
sumber
Jika Anda mencoba menelepon
requestFocus()
sebelum tata letak meningkat, itu akan kembali salah. Kode ini berjalan setelah tata letak meningkat. Anda tidak perlu keterlambatan 200 ms seperti yang disebutkan di atas .sumber
Saya tidak tahu apakah Anda sudah menemukan solusi, tetapi untuk masalah pengeditan setelah meminta fokus lagi:
Sudahkah Anda mencoba memanggil metode
selectAll()
atausetSelection(0)
(jika emtpy) di edittext1 Anda?Tolong beri tahu saya jika ini membantu, jadi saya akan mengedit jawaban saya untuk solusi lengkap.
sumber
sumber
Jika menggunakan
requestFocus()
dionCreate()
memperkenalkan masalah keyboard yang tidak muncul di ketuk, gunakanBindingAdapter
menggunakan SingleLiveEvent dan minta fokus di dalamnya.Inilah cara melakukannya:
BindingAdapter
sumber
Jawaban saya di sini
Ketika saya membaca dokumen resmi, saya pikir ini adalah jawaban terbaik, cukup berikan parameter View to seperti EditText Anda, tetapi showSoftKeyboard sepertinya tidak bekerja pada landscape
sumber