Ich möchte EditText
vorübergehend nicht foucs gewinnen.Temporäre Deaktivierung EditText
Szenario ist: Ich habe zwei EditTexts. Wenn ein Text von EditText geändert wird, möchte ich, dass ein anderer EditText nicht auf Benutzerklicks reagiert, bis ein anderes vordefiniertes Ereignis eintritt.
Um das zu erreichen, dass ich das versucht:
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume");
registerBroadcastReceivers();
}
// Register BroadcastReceivers
private void registerBroadcastReceivers() {
Log.d(TAG, "Registering broadcast receivers.");
// Google response receiver
googleResponseReceiver = new GoogleAPIResponseReceiver();
IntentFilter googleResponseIntentFilter = new IntentFilter(
RS_GoogleApiIntentService.ACTION_RECEIVED_GOOGLE_RESPONSE);
googleResponseIntentFilter.addCategory(Intent.CATEGORY_DEFAULT);
LocalBroadcastManager.getInstance(this).registerReceiver(
googleResponseReceiver, googleResponseIntentFilter);
}
editText1.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// Set EditText non-focusable
MyActivity.this.editText2.setFocusableInTouchMode(false);
}
});
.
.
.
// Somewhere in one function I call below function to start an IntentService.
.
.
.
// Call Google API with given URL
private void CallGoogleApiWithUrl(String url, int requestId) {
Intent intent = new Intent(this, RS_GoogleApiIntentService.class);
intent.putExtra(RS_GoogleApiIntentService.EXTRA_URL_STRING, url);
intent.putExtra(RS_GoogleApiIntentService.EXTRA_GOOGLE_API_REQUEST_ID,
requestId);
startService(intent);
}
// Broadcast receiver for Google API response
public class GoogleAPIResponseReceiver extends BroadcastReceiver {
// Enabling EditText works up to this point.
@Override
public void onReceive(Context context, Intent intent) {
// Stops working now onwards.
}
}
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// Set EditText focusable
MyActivity.this.editText2.setFocusableInTouchMode(true);
}
Layout:
<LinearLayout
style="@style/create_trip_activity_components_style"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:gravity="center_vertical"
android:orientation="horizontal" >
<EditText
android:id="@+id/from_location"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:ems="10"
android:hint="@string/from_location_hint"
android:imeOptions="actionDone"
android:imeActionLabel="Done"
android:inputType="text" >
<requestFocus />
</EditText>
<Button
android:id="@+id/use_current_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:onClick="useCurrentLocation"
android:text="@string/use_current"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginTop="20dp"
android:contentDescription="@string/swap_button_description"
android:onClick="swapLocations"
android:scaleType="fitStart"
android:src="@drawable/swap" />
<EditText
android:id="@+id/to_location"
style="@style/create_trip_activity_components_style"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:ems="10"
android:gravity="left"
android:hint="@string/to_location_hint"
android:imeOptions="actionDone"
android:imeActionLabel="Done"
android:inputType="text" >
</EditText>
<LinearLayout
style="@style/create_trip_activity_components_style"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="25dp"
android:gravity="center_vertical"
android:orientation="horizontal" >
<EditText
android:id="@+id/departuretime_date"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:clickable="true"
android:ems="10"
android:focusable="false"
android:focusableInTouchMode="false"
android:gravity="center"
android:hint="@string/departure_date_hint"
android:inputType="datetime" >
</EditText>
<EditText
android:id="@+id/departuretime_time"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:clickable="true"
android:ems="10"
android:focusable="false"
android:focusableInTouchMode="false"
android:gravity="center"
android:hint="@string/departure_time_hint"
android:inputType="datetime" >
</EditText>
</LinearLayout>
<Button
android:id="@+id/pick_match_create_trip"
style="@style/big_centered_button_style"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="80dp"
android:onClick="pickMatchesButtonClicked"
android:text="@string/pick_your_matches" />
<TextView
style="@style/create_trip_activity_components_style"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="75dp"
android:text="@string/current_location_textlabel"
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/current_location_text"
style="@style/create_trip_activity_components_style"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginTop="5dp"
android:text=""
android:textAppearance="?android:attr/textAppearanceSmall" />
<ListView
android:id="@+id/places_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:cacheColorHint="#00FFFF"
android:background="@color/white" >
</ListView>
EditText gewinnt nie wieder konzentrieren. Das Deaktivieren des Fokus funktioniert, aber das erneute Aktivieren funktioniert nicht. Ich habe auch versucht, editText2.setEnabled();
Methode zu verwenden. Es hat auch nicht funktioniert.
Bitte zeigen Erklärung editText1 und editText2 ... – TN888
Sie nicht wollen, um den Fokus oder Sie nicht die EditText sichtbar sein soll – krishna
nur darauf hingewiesen, dass Aufruf 'setFocusableInTouchMode (false)' 'nach setFocusable (false)' ist überflüssig. Auch 'setFocusable (true)' ist nicht erforderlich, wenn Sie 'setFocusableInTouchMode (true)' aufrufen. – Vikram