android - SwipeRefreshLayout no muestra ningún indicador de actualización
xml view (4)
Tengo un SwipeRefreshLayout
se usa dentro de los Fragmentos que se muestran en las actividades. Al deslizar, realiza la actualización, pero después de desplegarlo sube nuevamente y no hay indicador de progreso indeterminado (las barras de progreso animadas). Simplemente desaparece pero aún llama a Refresh () cuando termina. Aquí está mi diseño ...
Diseño de la actividad:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<ListView
android:id="@+id/left_drawer"
android:layout_width="@dimen/nav_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:dividerHeight="1px"
android:background="@color/drawer_background_gray"
android:clipToPadding="false"/>
</android.support.v4.widget.DrawerLayout>
Diseño de fragmento:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipe_container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"/>
</android.support.v4.widget.SwipeRefreshLayout>
<TextView
android:id="@android:id/empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/empty_text_size"
android:layout_gravity="center"
android:gravity="center"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:textColor="@color/brand_green"/>
<ProgressBar
android:id="@android:id/progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminateOnly="true"
android:visibility="gone"
android:layout_gravity="center"/>
</FrameLayout>
Código para inicializar el diseño del Fragment
:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_list, null);
swipeLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipe_container);
swipeLayout.setOnRefreshListener(this);
swipeLayout.setColorScheme(android.R.color.holo_blue_bright,
android.R.color.holo_green_light,
android.R.color.holo_orange_light,
android.R.color.holo_red_light);
return view;
}
En general, hay un retraso de 3 a 6 segundos mientras se actualiza, lo suficiente como para notarlo mientras se mira el registro. Debería ser visible, y funcionó bien cuando utilicé la biblioteca ahora obsoleta ActionBar-PullToRefresh
. Intenté hacer SwipeRefreshLayout
la vista raíz del diseño de Fragment e intenté eliminar el texto vacío y la vista de progreso, y continúa sin funcionar.
Hay algunos pasos más que entrar en mi código real que no puedo revelar, ya que es una aplicación diseñada para mi empresa. Pero es solo para proporcionar una base similar a muchos fragmentos diferentes que hacen cosas similares, no debería afectar ninguna funcionalidad para esto.
Cambie swipeLayout.setColorScheme () a .setColorSchemeResources (# Your Colors Ids)
Descubrí que el problema es que mi aplicación usa UI translúcida en Android 4.4, el relleno se establece en la parte superior de la lista y en la parte inferior de la lista para que vaya debajo de la barra de acción y encima de la barra de navegación. Dado que ListView se convierte en un elemento secundario de SwipeRefreshLayout
, el relleno debe configurarse en SwipeRefreshLayout
lugar de ListView
como lo había estado antes de cambiar a SwipeRefreshLayout
.
Usé este enfoque a continuación y funcionó para mí sin soluciones, incluso Fragmentos, después de tantos intentos:
<android.support.v4.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
** content **
</ScrollView>
</android.support.v4.widget.SwipeRefreshLayout>
Biblioteca de AppCompat: com.android.support:appcompat-v7:21.0.3
.
//to enable
swipeRefreshLayout.post(new Runnable() {
@Override public void run() {
swipeRefreshLayout.setRefreshing(true);
}});
//to disable
swipeRefreshLayout.post(new Runnable() {
@Override public void run() {
swipeRefreshLayout.setRefreshing(true);
}});
//IF ABOVE CODE DOESN''T WORK
//you might have made SwipeRefreshLayout as a root layout and it can be the source of bug
//so put SwipeRefreshLayout inside any ViewGroup like RelativeLayout, LinearLayout