Cóż, jest to trochę skomplikowane, niż myślałem.
Tutaj dodam szczegóły krok po kroku. Staraj się go przestrzegać. Udało mi się to osiągnąć na poziomie 10 api.
To rozwiązanie zakłada, że użytkownik powinien zamknąć okno dialogowe podpowiadania, gdy użytkownik kliknie przycisk Home lub jeśli trzeba przejść do następnej czynności bez interakcji użytkownika
Pierwszym krokiem jest utworzenie niestandardowego Spinnera poprzez rozszerzenie klasy Spinner. Powiedzmy, że stworzyliśmy klasę o nazwie CustomSpinner w pakiecie com.bts.sampleapp
Moja klasa CustomSpinner wygląda tak,
package com.bts.sampleapp;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.Spinner;
public class CustomSpinner extends Spinner{
Context context=null;
public CustomSpinner(Context context) {
super(context);
this.context=context;
}
public CustomSpinner(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public CustomSpinner(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
}
}
Teraz w pliku XML, należy wymienić element, Spinner przez ten zwyczaj turbinki,
<com.bts.sampleapp.CustomSpinner
android:id="@+id/spin"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
następnym krokiem jest, aby zainicjować i ustawić zasilacz do tego pokrętła w swojej klasie aktywny,
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
CustomSpinner spin=null;
spin=(CustomSpinner)findViewById(R.id.spin);
spin.setAdapter(spinnerAdapter); //you can set your adapter here.
}
Ostatnim krokiem jest zamknięcie okna dialogowego, gdy użytkownik kliknie przycisk HomeButton lub gdy działanie przeniesie się do tła. Aby to zrobić, możemy zastąpić OnPause() w ten sposób,
@Override
protected void onPause() {
Log.i("Life Cycle", "onPause");
spin.onDetachedFromWindow();
super.onPause();
}
Teraz w OnPause() wywołać metodę spin.onDetachedFromWindow();
który wykonuje pracę zamykania okna wiersza dla Ciebie.
Również dzwoniąc pod numer spin.onDetachedFromWindow();
z dowolnego miejsca na liście Acitivity, należy zamknąć okno dialogowe zachęty Spinner, jeśli jest otwarte.
Ślepy przypuszczenie (więc nie idzie jako odpowiedź): nie biorąc skupienie z tym poglądem na 'onResume()' rozwiązać ten problem? –
musisz użyć metody onStart() lub onResume(). – saravanan