2013-08-02 5 views
5

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.

+0

Bitte zeigen Erklärung editText1 und editText2 ... – TN888

+0

Sie nicht wollen, um den Fokus oder Sie nicht die EditText sichtbar sein soll – krishna

+0

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

Antwort

1

versuchen, dies ..

editText2.clearFocus(); 
+0

Es wird zunächst fokussierbar Objekt zu konzentrieren . Dies ist nicht meine Anforderung. – Geek

1

Sie setzen editText2.requestFocus();, wann immer Sie auf EditText konzentrieren möchten.

+0

Ich möchte, dass EditText den Fokus nur auf die Berührung des Benutzers richtet. Wieder möchte ich onClickListener nicht nur für diesen Zweck hinzufügen. – Geek

+0

Versuchen Sie diese 'editText2.isFocusableInTouchMode() ' – ved

+0

Es gibt falsch, wenn ich falsch gesetzt habe. – Geek

1

schreiben Sie es in Manifest-Datei der Aktivität, Es defocus die Edittext von Erstellungsaktivität zum ersten Mal. und wieder den Fokus durch Berühren von Text bearbeiten erhalten

android:windowSoftInputMode="adjustPan|stateHidden" 
7

Es ist wirklich einfach mein Freund. Sie können so etwas wie unten probieren:

editText1.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void onTextChanged(CharSequence s, int start, int before, 
       int count) { 
     // Set EditText non-focusable 
     editText2.setEnable(false); 
     editText2.setClickable(false); 


    } 
}); 

. 
. // some work 
. 

listView.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 

     // Set EditText focusable 
       editText2.setEnable(true); 
     editText2.setClickable(true); 
} 

einfach Ihren Code so etwas wie oben aktualisieren und versuchen. das wird mürrisch funktionieren. Wenn nicht, dann lass es mich wissen, ich werde dir helfen.

Genießen Coding ... :)

+0

Ich habe es versucht. Problem ist, sobald ich es deaktiviere, wird es nicht wieder aktiviert. – Geek

+0

Dann vielleicht das Problem in woanders in Ihrem Kabeljau, wollen Sie uns mehr davon zeigen, wie die XML-Datei? – felixd

+0

@felixd XML-Datei hinzugefügt. Die Sache ist, wenn ich Code zum Aktivieren von EditText in einigen Methoden es funktioniert. Um es klar zu stellen, mache ich zuerst EditText deaktiviert, dann rufe ich einen IntentService auf und gebe die Ergebnisse zurück zur Aktivität. Um das Ergebnis von IntentService zu hören, habe ich einen Rundfunkempfänger in meiner Tätigkeit.Also, wenn ich Code, um EditText in Broadcast-Empfänger "onReceive" oder in einer anderen Methode nach Broadcast-Empfänger in App-Flow aktivieren aktivieren, funktioniert dies nicht. – Geek

1
Timer timer = new Timer(); 
timer.schedule(new TimerTask() { 

    @Override 
    public void run() { 
    editText2.setEnable(false); 
    editText2.setClickable(false); 
    } 
}, 20); 
1

Sie den folgenden Code verwenden können und entsprechend von Java manipulieren.

`<EditText ... 
    android:clickable="false" 
    android:cursorVisible="false" 
    android:focusable="false" 
    android:focusableInTouchMode="false"> 
</EditText>' 
+0

Dies liefert keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klärung zu bitten, hinterlasse einen Kommentar unter seinem Beitrag - du kannst deine eigenen Beiträge jederzeit kommentieren, und sobald du genügend [Reputation] (http://stackoverflow.com/help/whats-reputation) hast, wirst du das tun in der Lage sein [jeden Beitrag kommentieren] (http://stackoverflow.com/help/privileges/comment). –

+0

können Sie den folgenden Code verwenden: – UMESH0492

+0

UMESH0492