J'utilise pull pour actualiser dans mon fragment pour actualiser les données récupérées via une URL json. Mais le problème auquel je suis confronté est que, dès que j'attermine sur une page de fragment, le widget de rafraîchissement commence et les données commencent à se charger, mais si je récupère les données sur Internet, je glisse mon viewpager sur une nouvelle page. et puis immédiatement à la page précédente où les données étaient en charge, puis un nouveau widget Swipe Refresh vient sur le widget précédemment existant, d'où il y a deux widgets qui se chevauchent et un widget reste toujours sur l'écran même si les données sont chargées. utilisé setRefrshing (false) mais il ne fonctionne pas selon mes besoins.Quelques problèmes concernant l'implémentation de Pull to Refresh à l'aide de SwipeRefreshLayout
Fragment.java
public class Africa extends Fragment implements SwipeRefreshLayout.OnRefreshListener{
//ProgressDialog pDialog;
private RecyclerView mRecyclerView;
//private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
private CountryDataAdapter adapter;
private ArrayList<CountriesData> data;
private SwipeRefreshLayout swipe;
EasyTracker easyTracker;
public Africa(){
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
easyTracker = EasyTracker.getInstance(getActivity());
// setContentView(R.layout.countrydata);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
//pDialog = new ProgressDialog(this.getContext(), ProgressDialog.THEME_HOLO_LIGHT);
View v = inflater.inflate(R.layout.countrydata, container, false);
//mRecyclerView = (RecyclerView) v.findViewById(R.id.my_recycler_view1);
mRecyclerView = (RecyclerView)v.findViewById(R.id.my_recycler_view1);
mRecyclerView.setHasFixedSize(true);
adapter=new CountryDataAdapter(getActivity());
mLayoutManager = new LinearLayoutManager(getContext());
mRecyclerView.setLayoutManager(mLayoutManager);
// loadJSON();
swipe=(SwipeRefreshLayout)v.findViewById(R.id.swipe_refresh_layout);
swipe.setOnRefreshListener(this);
swipe.setColorSchemeColors(R.color.b, R.color.p, R.color.g, R.color.o);
// loadRetro();
final boolean ref=swipe.isRefreshing();
if(ref) loadRetro();
else
{
swipe.postDelayed(new Runnable() {
@Override
public void run() {
swipe.setRefreshing(true);
loadRetro();
easyTracker.send(MapBuilder.createEvent("Home Page", "Swipe", "Africa", null).build());
}
}, 500);
}
return v;
}
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
@Override
public void onCreateOptionsMenu(
Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.main, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_refresh) {
boolean x=isNetworkAvailable();
if(x)
{
swipe.setRefreshing(true);
loadRetro();
easyTracker.send(MapBuilder.createEvent("Home Page", "Refresh", "Africa", null).build());
return true;
}
else Toast.makeText(getActivity(), "No Internet Connection!",
Toast.LENGTH_SHORT).show();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onRefresh(){
// swipe.setRefreshing(true);
// loadRetro();
if(!swipe.isRefreshing()) {
swipe.postDelayed(new Runnable() {
@Override
public void run() {
swipe.setRefreshing(true);
loadRetro();
}
}, 1500);
}
else loadRetro();
easyTracker.send(MapBuilder.createEvent("Home Page", "Pull To Refresh", "Africa", null).build());
// pDialog.dismiss();
}
public void loadRetro(){
// swipe.setRefreshing(true);
// pDialog.setMessage("Please wait...");
// pDialog.setCancelable(false);
// pDialog.show();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://www.appuonline.com")
.addConverterFactory(GsonConverterFactory.create())
.build();
jsonrequest request = retrofit.create(jsonrequest.class);
Call<JsonResponse> call = request.getJSON5();
call.enqueue(new Callback<JsonResponse>() {
@Override
public void onResponse(Call<JsonResponse> call, Response<JsonResponse> response) {
try{
JsonResponse jsonResponse = response.body();
data = new ArrayList<>(Arrays.asList(jsonResponse.getData()));
adapter.addItems(data);
mRecyclerView.setAdapter(adapter);
// if (pDialog.isShowing())
// pDialog.dismiss();
swipe.setRefreshing(false);}
catch (Exception e){
e.printStackTrace();
}
}
@Override
public void onFailure(Call<JsonResponse> call, Throwable t) {
try{
Log.d("Error", "no connection");
swipe.setRefreshing(false);}
catch (Exception e){
e.printStackTrace();
}
}
});
}
}
Que fera cette commande? –
cela ne recyclera pas le fragment précédent. – LearnPainLess
ce qui signifie que votre ancien fragment restera tel quel. (ne pas recharger à nouveau) – LearnPainLess