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
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.
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.
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 .