Twitter (公式アプリ) などの Android アプリケーションでは、ListView に遭遇したときに、それを下にプルして (放すと元に戻ります) コンテンツを更新できます。
あなたの意見では、それを実装する最善の方法は何でしょうか?
私が考えられるいくつかの可能性は次のとおりです:
- ListView の一番上にある項目 - ただし、ListView 上でアニメーションを使用して項目の位置 1 (0 ベース) までスクロールバックするのは簡単な作業ではないと思います。
- ListView の外側の別のビュー - ただし、ListView がプルされたときにその位置を下に移動するように注意する必要があり、ListView へのドラッグ タッチによって ListView 上の項目が実際にスクロールされるかどうかを検出できるかどうかはわかりません。
何かおすすめはありますか?
追伸:公式Twitterアプリのソースコードはいつ公開されるのでしょうか。公開されるとの言及はありましたが、6か月が経過しましたが、それ以降何も聞こえてきません。
ベストアンサー1
ついに、Google が pull-to-refresh ライブラリの公式バージョンをリリースしました。
これはサポートライブラリ内で と呼ばれSwipeRefreshLayout
、ドキュメントはここ:
SwipeRefreshLayout
レイアウトを更新するためのプルとして扱われるビューの親として追加します。(ListView
例として挙げましたが、 などであれば何でも構いませんView
。)LinearLayout
ScrollView
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/pullToRefresh" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent"/> </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
クラスにリスナーを追加する
protected void onCreate(Bundle savedInstanceState) { final SwipeRefreshLayout pullToRefresh = findViewById(R.id.pullToRefresh); pullToRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { refreshData(); // your code pullToRefresh.setRefreshing(false); } }); }
pullToRefresh.setRefreshing(true/false);
ご要望に応じてお電話いただくことも可能です。
アップデート
Androidサポートライブラリは廃止され、AndroidXに置き換えられました。新しいライブラリへのリンクは以下にあります。ここ。
また、プロジェクトに次の依存関係を追加する必要があります。
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
または
「リファクタリング >> AndroidX に移行」に移動すると、Android Studio が依存関係を処理します。