J'utilise ViewPager et l'annonce (d'Admob) dans la mise en page xml. J'ai deux fragments (HomeFragment et TeamFragment), l'un a un CountDownTimer et l'autre un ListView. Comme nous le savons, ViewPager conserve les deux avec les vues créées de sorte que les deux sont actifs en même temps.CountDownTimer, ViewPager, Ad et actualisation constante Articles ListView - comportement étrange
Le problème est le suivant: Lorsque mon compteur CountDonwTimer est activé (onTick est appelé), les éléments (lignes) de ListView sont actualisés (getView() de ListAdapter est appelée).
Ce qui est intéressant, cela ne se produit que lorsque l'annonce montre (connexion Internet est activée). Quand il n'y a pas d'annonce, tout fonctionne bien (pas d'actualisation de ListView).
Ce n'est pas un gros problème, mais il draine la batterie.
Journaux:
01-21 15:56:35.150: D/HomeFragment(17366): onTick() in CountDownTimer - just before counterTV.setText(...)
01-21 15:56:35.155: D/ListAdapter in TeamFragment(17366): getView() position: 0
01-21 15:56:35.215: D/ListAdapter in TeamFragment(17366): getView() position: 1
01-21 15:56:35.230: D/ListAdapter in TeamFragment(17366): getView() position: 2
01-21 15:56:35.245: D/ListAdapter in TeamFragment(17366): getView() position: 3
01-21 15:56:35.255: D/ListAdapter in TeamFragment(17366): getView() position: 4
01-21 15:56:35.260: D/ListAdapter in TeamFragment(17366): getView() position: 0
01-21 15:56:35.265: D/ListAdapter in TeamFragment(17366): getView() position: 1
01-21 15:56:35.265: D/ListAdapter in TeamFragment(17366): getView() position: 2
01-21 15:56:35.270: D/ListAdapter in TeamFragment(17366): getView() position: 3
01-21 15:56:35.275: D/ListAdapter in TeamFragment(17366): getView() position: 4
01-21 15:56:40.160: D/HomeFragment(17366): onTick() in CountDownTimer - just before counterTV.setText(...)
01-21 15:56:40.170: D/ListAdapter in TeamFragment(17366): getView() position: 0
01-21 15:56:40.185: D/ListAdapter in TeamFragment(17366): getView() position: 1
01-21 15:56:40.200: D/ListAdapter in TeamFragment(17366): getView() position: 2
01-21 15:56:40.215: D/ListAdapter in TeamFragment(17366): getView() position: 3
01-21 15:56:40.225: D/ListAdapter in TeamFragment(17366): getView() position: 4
01-21 15:56:40.245: D/ListAdapter in TeamFragment(17366): getView() position: 0
01-21 15:56:40.260: D/ListAdapter in TeamFragment(17366): getView() position: 1
01-21 15:56:40.260: D/ListAdapter in TeamFragment(17366): getView() position: 2
01-21 15:56:40.265: D/ListAdapter in TeamFragment(17366): getView() position: 3
01-21 15:56:40.270: D/ListAdapter in TeamFragment(17366): getView() position: 4
01-21 15:56:45.165: D/HomeFragment(17366): onTick() in CountDownTimer - just before counterTV.setText(...)
01-21 15:56:45.170: D/ListAdapter in TeamFragment(17366): getView() position: 0
01-21 15:56:45.185: D/ListAdapter in TeamFragment(17366): getView() position: 1
01-21 15:56:45.200: D/ListAdapter in TeamFragment(17366): getView() position: 2
01-21 15:56:45.215: D/ListAdapter in TeamFragment(17366): getView() position: 3
01-21 15:56:45.225: D/ListAdapter in TeamFragment(17366): getView() position: 4
01-21 15:56:45.245: D/ListAdapter in TeamFragment(17366): getView() position: 0
01-21 15:56:45.260: D/ListAdapter in TeamFragment(17366): getView() position: 1
01-21 15:56:45.265: D/ListAdapter in TeamFragment(17366): getView() position: 2
01-21 15:56:45.270: D/ListAdapter in TeamFragment(17366): getView() position: 3
01-21 15:56:45.270: D/ListAdapter in TeamFragment(17366): getView() position: 4
HomeFragment:
public class HomeFragment extends SherlockFragment {
(...)
private OpeningCeremonyTimer countDownTimer;
private TextView counterTV;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
(...)
countDownTimer = new OpeningCeremonyTimer(initialTime, 5000);
countDownTimer.start();
return view;
}
private class OpeningCeremonyTimer extends CountDownTimer {
private StringBuilder time = new StringBuilder();
public OpeningCeremonyTimer(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onTick(long millisUntilFinished) {
time.setLength(0);
if (millisUntilFinished > DateUtils.DAY_IN_MILLIS) {
long count = millisUntilFinished/DateUtils.DAY_IN_MILLIS;
if (count > 1)
time.append(count).append(" days ");
else
time.append(count).append(" day ");
millisUntilFinished %= DateUtils.DAY_IN_MILLIS;
}
time.append(DateUtils.formatElapsedTime(Math.round(millisUntilFinished/1000d)));
Log.d(TAG, "onTick() in CountDownTimer - just before counterTV.setText(...)");
counterTV.setText(time.toString());
}
@Override
public void onFinish() {
counterTV.setText(DateUtils.formatElapsedTime(0));
}
}
}
TeamFragment:
public class TeamFragment extends SherlockFragment {
(...)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
(...)
TeamFragmentListAdapter matchesListAdapter = new TeamFragmentListAdapter(context, matchesList);
matchesLV.setAdapter(matchesListAdapter);
return view;
}
}
Voici ma mise en page principale:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.google.ads.AdView
android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
ads:adSize="SMART_BANNER"
ads:adUnitId="xxx"
ads:loadAdOnCreate="true"/>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/adView"/>
</RelativeLayout>