मेरे पास एक EditText- फ़ील्ड है और इसके लिए एक OnFocusChangeListener सेट करें। जब यह फोकस खो जाता है, तो एक विधि कहा जाता है, जो डेटाबेस में एक के साथ EditText के मूल्य की जांच करता है। यदि विधि का रिटर्न-वैल्यू सही है, तो एक टोस्ट दिखाया गया है और फोकस को फिर से एडिटटेक्स्ट पर वापस जाना चाहिए। ध्यान हमेशा एडिटटेक्स्ट पर वापस जाना चाहिए और कीबोर्ड को दिखाना चाहिए, जब तक कि विधि का रिटर्न-वैल्यू झूठा न हो।
संपादित करें: मुझे लगता है, मैंने अपनी वास्तविक समस्या को अभी तक पूरी तरह से स्पष्ट नहीं किया है: स्क्रीन पर कोई अन्य आइटम संपादित करने में सक्षम नहीं होना चाहिए, जब तक कि EditText का मूल्य एक मूल्य के लिए संपादित नहीं किया जाता है, जो विधि को "चेकलिगनाम (लिगनाम) बनाता है" " विवरण झूठा है। केवल EditText-Field संपादन योग्य होना चाहिए।
यहाँ मेरा कोड है (जो मेरे लिए काम नहीं करता है):
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();
}
}
और विधि:
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;
}
यह कोड निम्न परिणाम की ओर ले जाता है: EditText के फ़ोकस हो जाने के बाद, फोकस EditText पर वापस आ जाता है, लेकिन मैं अब पाठ को संपादित नहीं कर सकता।
EDIT2: मेरा कोड बदला गया। परिदृश्य:
मैं पहले EditText पर क्लिक करता हूं और उसमें एक स्ट्रिंग डालता हूं, जो पहले से ही डेटाबेस में है। टोस्ट दिख रहा है। अब मैं अपने स्ट्रिंग को संपादित नहीं कर सकता। मैं कीबोर्ड पर "अगला" क्लिक करता हूं और फोकस पहले EditText पर रहता है। मैं अपने स्ट्रिंग को संपादित करने की कोशिश करता हूं, लेकिन कुछ भी नहीं होता है। इसके बजाय मेरा नया स्ट्रिंग दूसरे EditText में दिख रहा है। मैं अपने डिवाइस के बैक-एरो पर क्लिक करता हूं और पहले और दूसरे एडिट टेक्स्ट पर फिर से क्लिक करता हूं -> कोई कीबोर्ड नहीं दिखा रहा है।
यहाँ मेरा नया कोड है:
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();
}
}
}