J'ai 5 onglets coulissants dans un ViewPager
, chacun contenant un fragment différent. Si les données ne parviennent pas à charger, je veux informer l'utilisateur via Snackbar. Ça fonctionne bien. Ce que j'essaye de réaliser est, si les données ne chargent pas dans un fragment particulier, je veux montrer un Snackbar
seulement dans ce fragment particulier. C'est possible?Snackbar dans un fragment particulier
Je vais élaborer:
Tenir compte d'une mise en page d'onglet coulissant avec 3 fragments A, B, C. & Tous les 3 fragments effectuer une requête de réseau et de charger les données. Si, pour une raison quelconque, les données ne parviennent pas à charger dans le fragment A, un casse-croûte devrait être affiché indéfiniment. Et si l'utilisateur glisse vers le fragment B (dans lequel les données ont été chargées avec succès), le snackbar ne devrait pas être visible. Par conséquent, le snackbar ne doit être visible que dans le fragment qui n'a pas pu charger les données.
Fragment de code:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fragment_latest"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?android:attr/windowBackground"
tools:context=".MainFragment">
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/swipe_view"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/date_layout"
android:visibility="gone"
android:layout_gravity="center_horizontal"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatSpinner
android:id="@+id/country_select"
style="@style/Base.Widget.AppCompat.Spinner.Underlined"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:entries="@array/country"
/>
<android.support.v7.widget.AppCompatSpinner
android:id="@+id/month_select"
style="@style/Base.Widget.AppCompat.Spinner.Underlined"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:entries="@array/month"
/>
<android.support.v7.widget.AppCompatSpinner
android:id="@+id/year_select"
style="@style/Base.Widget.AppCompat.Spinner.Underlined"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:entries="@array/year"
/>
</LinearLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/latest_recyclerview"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</android.support.v4.widget.SwipeRefreshLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<TextView
android:id="@+id/not_available"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:gravity="center"
android:textSize="16sp" />
</LinearLayout>
Code du Snack-bar:
if (Utils.isNetworkAvailable(getActivity())) {
adapter.notifyDataSetChanged();
loadData();
} else {
swipeRefreshLayout.setRefreshing(false);
textView.setText(getString(R.string.check_internet));
Snackbar.make(frameLayout, "Loading failed.", Snackbar.LENGTH_INDEFINITE).setAction("Retry", new View.OnClickListener() {
@Override
public void onClick(View view) {
((MainActivity) getActivity()).loadAds();
refreshData();
}
}).show();
}
où
FrameLayout frameLayout = (FrameLayout) v.findViewById(R.id.fragment_latest);
** Je veux montrer un snack-bar dans ce fragment particulier seulement. Est-ce possible? ** Qu'entendez-vous par là? Vous voulez dire quand ce fragment est visible, alors seulement afficher snakcbar? –
@NJ J'ai mis à jour le post avec plus de détails. S'il vous plaît voir ça. – hemantv
tout en montrant la vue de passage de snackbar du fragment ainsi quand la vue devient invisible alors sanckbar deviennent automatiquement invisibles –