2013-03-14 1 views
6

Vorrei mostrare l'indicatore di caricamento in AutoCompleteTextView durante il caricamento dei dati dal servizio web. Preferibilmente dovrebbe essere mostrato sul lato destro del completamento automatico (ad esempio animazione come nel controllo del progresso - ruota che gira). Come questo può essere fatto?Come aggiungere indicatore di caricamento a AutoCompleteTextView

risposta

5

vorrei mostrare indicatore di caricamento in AutoCompleteTextView mentre il caricamento dei dati da web-service.

mettere un ProgressBar con uno sguardo indeterminata sulla destra del widget e estendono la classe AutoCompleTextView in questo modo:

public class AutoCompleteLoadding extends AutoCompleteTextView { 

    private ProgressBar mLoadingIndicator; 

    public void setLoadingIndicator(ProgressBar view) { 
     mLoadingIndicator = view; 
    } 

    @Override 
    protected void performFiltering(CharSequence text, int keyCode) { 
     // the AutoCompleteTextview is about to start the filtering so show 
     // the ProgressPager 
     mLoadingIndicator.setVisibility(View.VISIBLE); 
     super.performFiltering(text, keyCode); 
    } 

    @Override 
    public void onFilterComplete(int count) { 
     // the AutoCompleteTextView has done its job and it's about to show 
     // the drop down so close/hide the ProgreeBar 
     mLoadingIndicator.setVisibility(View.INVISIBLE); 
     super.onFilterComplete(count); 
    } 

} 

Passare il riferimento alla ProgressBar con il metodo setLoadingIndicator(). Ciò presuppone che tu stia effettuando le richieste di servizio Web nell'adattatore (del AutoCompleteTextView)/nel filtro dell'adattatore.

1

Si desidera utilizzare barre di avanzamento e non spinners. Usa la vista grafica per posizionarli sopra i campi di AutoCompleteTextView e impostare il loro id. Ho impostato il mio per progredire.

<ProgressBar 
    android:id="@+id/progressLoading" 
    style="?android:attr/progressBarStyleSmall" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignRight="@+id/autoCompleteTextViewId" 
    android:layout_alignTop="@+id/autoCompleteTextViewId" 
    android:paddingTop="14dip" 
    android:paddingRight="10dip" /> 

Poi nella vostra attività/frammento:

final ProgressBar barProgress = (ProgressBar) findViewById(R.id.progressLoading); 
originProgress.setVisibility(View.GONE); 

E 'automaticamente visibile in modo che inizialmente impostarlo su nascosto. Quindi lo impostiamo su VISIBLE sul tuo addTextChangedListener su AutoCompleteTextView. Quindi, ogni volta che le attività vengono completate, la si ritorna nascosta.

0

Per aggiungere una barra di avanzamento all'interno di un AutoCompleteView, si può facilmente effettuare le seguenti operazioni:

Innanzitutto creare una classe personalizzata di completamento automatico in questo modo:

public class AutoCompleteWithLoading extends AutoCompleteTextView{ 
    private ProgressBar mLoadingIndicator; 


    public AutoCompleteWithLoading(Context context) { 
     super(context); 
    } 

    public AutoCompleteWithLoading(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public AutoCompleteWithLoading(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    @TargetApi(Build.VERSION_CODES.LOLLIPOP) 
    public AutoCompleteWithLoading(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
     super(context, attrs, defStyleAttr, defStyleRes); 
    } 

    @TargetApi(Build.VERSION_CODES.N) 
    public AutoCompleteWithLoading(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes, Resources.Theme popupTheme) { 
     super(context, attrs, defStyleAttr, defStyleRes, popupTheme); 
    } 


    public void setLoadingIndicator(ProgressBar progressBar) { 
     mLoadingIndicator = progressBar; 
    } 

    public void dispayIndicator(){ 
     if(mLoadingIndicator != null){ 
      mLoadingIndicator.setVisibility(View.VISIBLE); 
     } 
     this.setText(""); 
    } 

    public void removeIndicator(){ 
     if(mLoadingIndicator != null){ 
      mLoadingIndicator.setVisibility(View.GONE); 
     } 
    } 
} 

In seguito, Aggiungi questo al vostro XML

  <thriviastudios.com.views.view.AutoCompleteWithLoading 
       android:padding="10dp" 
       android:layout_margin="5dp" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       style="@style/NotPresentationText" 
       android:id="@+id/activity_activities_search_city_text_view" 
       android:popupBackground="@color/app_bg" 
       android:layout_centerInParent="true" 
       android:background="@color/app_bg_darker" 
       android:singleLine="true" 
       android:hint="City" 
       android:imeOptions="actionDone" 
       android:textColorHint="@color/white" 
       /> 


       <ProgressBar 
        android:id="@+id/loading_indicator" 
        style="?android:attr/progressBarStyleSmall" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center_vertical|right" 
        android:layout_marginRight="20dp" 
        android:visibility="gone"/> 
      </FrameLayout> 

NB: utilizzare il percorso completo per la classe di completamento automatico personalizzato

Quindi, nella tua attività o frammento, ottieni un riferimento all'indicatore e al completamento automatico. Fissare la barra di avanzamento per completamento automatico in questo modo:

city.setLoadingIndicator(indicator); 

e si può mostrare ulteriormente o rimuovere l'indicatore di quando lo si desidera in questo modo:

city.dispayIndicator(); 

e

city.removeIndicator(); 

Spero che questo aiuta qualcuno .