2016-06-20 2 views
1

J'essaie actuellement d'implémenter la mise en page par glissement-rafraîchissement dans une mise en page relative, mais elle est extrêmement insensible et instable. Lorsque je baisse l'écran, il ne rafraîchit généralement pas ou il rafraîchit sans barre de progression.Problèmes liés à la mise en page relative de la mise en page par glissement-rafraîchissement

<android.support.v4.widget.SwipeRefreshLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.example.miaor.tutorialweather.MainActivity" 
android:id="@+id/refreshLayout" 
android:background="#fe970b"> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

</RelativeLayout> 

public class MainActivity extends AppCompatActivity{ 

public static final String TAG = MainActivity.class.getSimpleName(); 
@BindView(R.id.TimeString) TextView mTimeLabel; 
@BindView(R.id.TemperatureLabel) TextView mTemperatureLabel; 
@BindView(R.id.HumidityValue) TextView mHumidityValue; 
@BindView(R.id.rainingChanceValue) TextView mChance; 
@BindView(R.id.weatherIcon) ImageView mWeatherIcon; 
@BindView(R.id.SummaryText) TextView mSummaryText; 
@BindView(R.id.refreshLayout) SwipeRefreshLayout mSwipeRefreshLayout; 

///why do we make a new variable of CurrentWeather 
private CurrentWeather mCurrentWeather; 
private String apiKey = "6b9448b8e21c2abe2fb623b25554a77c"; 
private double latitude = 31.230708; 
private double longitude = 121.472916; 
private String forecastUrl = "https://api.forecast.io/forecast/" + apiKey + 
     "/" + latitude + "," + longitude; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ButterKnife.bind(this); 

    ///implement swipe-to-refresh feature 
    mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
      Log.i(TAG, "onRefresh is working"); 
      getForecast(); 
     } 
    }); 

    getForecast(); 

    Log.d(TAG, "Main UI code is running!"); 
} 

Répondre

0

Votre code semble bien, il est bizarre que ça ne fonctionne pas correctement ... Peut-être qu'il est à cause de la bibliothèque Butterknife? Je ne pense pas que ce soit le problème, mais cela vaut le coup pour obtenir des vues manuellement pour voir si c'est le problème

Ensuite, si vous avez besoin de l'animation de chargement pour apparaître/cacher que vous pouvez utiliser mSwipeRefreshLayout.setRefreshing(boolean);

Par exemple, dans mon application, j'attache d'abord l'écouteur (comme vous l'avez fait dans votre exemple) et ensuite j'utilise le code suivant pour montrer l'animation de chargement pendant que je récupère les données.

// Show loading while fetching the first set of data 
mainSwipeRefreshLayout.post(new Runnable() { 
    @Override 
    public void run() { 
     mainSwipeRefreshLayout.setRefreshing(true); 
    } 
}); 

Dans ma méthode fetchData() J'utilise la ligne suivante pour cacher à nouveau l'animation quand il finit aller chercher les données.

// On load complete stop refresh animation 
mainSwipeRefreshLayout.setRefreshing(false); 

Espérons que cela aide! Andres.

1

Vous ne pouvez pas implémenter SwipeToRefreshLayout avec RelativeLayout en tant qu'enfant. Vous devez avoir une vue défilante comme seul enfant. par exemple. Listview, RecyclerView, ScrollView. C'est la raison pour laquelle cela ne fonctionne pas comme prévu pour vous.