私のアプリには、割り当てルートのリストがあります。ルートはウェブから割り当てられました。ビューがプルダウンされた後、リストが更新されました。しかし、私がプルダウンするたびに、拡大を見る。スワイプを追加して動的リストのレイアウトを更新する
これは、リフレッシュするためにスワイプを適用する前に、私のスクリーンショットです:
これは、リフレッシュするためにスワイプを適用した後、私のスクリーンショットです:
Viewがプルダウン後に毎回継続的に拡大しますスワイプしてリフレッシュするビュー。
は、これは私がSwipeRefreshLayout
でレイアウトファイルを含める方法です:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginEnd="10dp"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:background="?android:attr/selectableItemBackground"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".ui.activities.RoutesAssignActivity">
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipeToRefreshLayoutId"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/md_white_1000"
android:scrollbars="vertical" />
</android.support.v4.widget.SwipeRefreshLayout>
</RelativeLayout>
これは私のAPI呼び出しです:
void getRoutes() {
Log.e("getRoutes", "=======getRoutes======== ");
final ApiService service = RestClient.getClient();
Call<ApiResponse> signedIn = service.getRoutesApi(getPreference().getToken());
signedIn.enqueue(new Callback<ApiResponse>() {
@Override
public void onResponse(Response<ApiResponse> response) {
if (response.isSuccess()) {
ApiResponse result = response.body();
//error handling
if (result.getData() != null && result.getData().getRoutesList() != null) {
dialog.dismiss();
emptyHistory.setVisibility(View.GONE);
historyView.setVisibility(View.VISIBLE);
routesDatas = result.getData().getRoutesList();
setupRecyclerView(routesDatas);
} else if (result.getMsg().equalsIgnoreCase("Invalid token or Token has expired")) {
getPreference().removeLoginPreferences();
Intent intent = new Intent(RoutesAssignActivity.this, LoginActivity.class);
finish();
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
overridePendingTransition(0, 0);
startActivity(intent);
} else {
dialog.dismiss();
emptyHistory.setVisibility(View.VISIBLE);
historyView.setVisibility(View.GONE);
}
} else {
// response received but request not successful (like 400,401,403 etc)
//Handle errors
dialog.dismiss();
Snackbar.make(findViewById(android.R.id.content),
response.message(), Snackbar.LENGTH_LONG).show();
}
}
@Override
public void onFailure(Throwable t) {
dialog.dismiss();
showNetworkSettings();
Log.e("Errors :: getRoutes", "=======Status Code ======== " + t.getMessage());
}
});
}
割り当てルートここに更新し得る:onCreate
方法でroutesDatas = result.getData().getRoutesList();
、私はgetRoutes()
メソッドと呼びます:
if (getNetworkStatus()) {
getRoutes();
} else {
showNetworkSettings();
}
IセットアップなどRecyclerView
:
void setupRecyclerView(List<RoutesList> routes) {
dialog.dismiss();
FontIconTypefaceHolder.init(getAssets(), "fonts/MaterialIcons-Regular.ttf");
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
stickyHeaderListAdapter = new StickyHeaderListAdapter(routes, this);
recyclerView.addItemDecoration(new HorizontalDividerItemDecoration.Builder(this).build());
final StickyRecyclerHeadersDecoration headersDecor = new StickyRecyclerHeadersDecoration(stickyHeaderListAdapter);
recyclerView.addItemDecoration(headersDecor);
recyclerView.setAdapter(stickyHeaderListAdapter);
}
私はonCreate
方法でSwipe to Refresh
を適用するので、私はプルダウン時にビューには、毎回継続的に拡大します。
if (getNetworkStatus()) {
getRoutes();
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
getRoutes();
swipeRefreshLayout.setEnabled(false);
}
});
} else {
dialog.dismiss();
showNetworkSettings();
}
ここでSwipe to Refresh
を実装するにはどうすればよいですか?
リフレッシュするたびにrecyclerViewを設定しないでください。項目を設定するためのアダプタでメソッドを作成し、 'notifyDataSetChanged()'を呼び出してください。 'recyclerView.setHasFixedSize(true);'はあなたのアイテムサイズが変わる可能性があるので必須ではありません。そしてあなたのレイアウトでは、すべてのウィジェットの高さとして 'match_parent'を使います。 –
申し訳ありませんが、おかげで、私はそれを削除します。つまり、 'setupRecyclerView'メソッドで' notifyDataSetChanged'を使用します。 –
ここでは、リスト画面で 'pull down to refresh 'を適用すると、ビューを展開するだけです。しかし、私はホーム画面からリスト画面に移動すると、表示がうまくいくように見えます。 –