2013-07-31 12 views
9

Chcę ukryć okno z pytaniem na zewnątrz. Jeśli otwarte okno podręczne jest otwarte, a użytkownik naciśnie klawisz, aktywność w domu zostanie zminimalizowana, więc gdy użytkownik ponownie otworzy aplikację, okno z monitem powinno zniknąć.
Czy jest jakiś sposób, aby to osiągnąć? DziękujemyJak ukryć rozwijaną tarczą androida?

Edytuj: - Monit podręczny nie jest dostosowywany. Nie mogę ukryć ich w metodach lub onResume.

+0

Ślepy przypuszczenie (więc nie idzie jako odpowiedź): nie biorąc skupienie z tym poglądem na 'onResume()' rozwiązać ten problem? –

+0

musisz użyć metody onStart() lub onResume(). – saravanan

Odpowiedz

12

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.

+0

To zadziałało ... Jeszcze jedno możemy wybrać ten sam element dwa razy w błędzie. Myślę, że musimy zmodyfikować klasę customspinner? –

+0

masz na myśli jak wybór wielokrotny? Nie jestem pewien. Nie próbowałem tego. Przepraszam za to .. –

+0

Nie zaznaczono wiele razy, zakładając, że twoja przędzarka ma 5 przedmiotów, które wybrałeś, element 2, a następnie ponownie, jeśli wybierzesz pozycję 2, spinner nie uruchomi metody onItemSelection –

0
  • Możesz wyskoczyć Aktywność jako motyw Dialog.
  • Zastąpić metodę onPause.

    chronione void onPause() { super.onPauza(); this.finish(); }

12

Na podstawie odpowiedzi Andro, możesz preferować odbicie, aby móc wywołać metodę chronioną naDetachedFromWindow. Wtedy nie musisz podklasy Spinner, dostosować układu, itp.

/** 
* Hides a spinner's drop down. 
*/ 
public static void hideSpinnerDropDown(Spinner spinner) { 
    try { 
     Method method = Spinner.class.getDeclaredMethod("onDetachedFromWindow"); 
     method.setAccessible(true); 
     method.invoke(spinner); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
-1

spinner.clearFocus();

to prosta linia zamknąć spinner programitically