[解決済み] AndroidのPull-to-Refreshの実装方法
2022-03-20 14:25:14
質問
Twitter(公式アプリ)などのAndroidアプリでは、ListViewに出会ったとき、それを下に引っ張って(離すと跳ね返される)内容を更新することができます。
それを実現するためには、どのような方法があるとお考えですか?
いくつか思いつく可能性があります。
- ListViewの上にあるアイテム - しかし、ListViewのアニメーションでアイテムの位置1(0ベース)にスクロールバックするのは簡単な作業ではないと思います。
- ListViewの外側にある別のビュー - しかし、ListViewが引っ張られたときにListViewの位置を下に移動することに注意する必要があり、ListViewへのドラッグタッチがまだ本当にListView上の項目をスクロールしているかどうかを検出できるかどうかがわかりません。
何かお勧めはありますか?
追伸:Twitter公式アプリのソースコードっていつ公開されるんでしょうね。公開されるとのことですが、半年が過ぎましたが、その後音沙汰がありません。
解決方法は?
ついにGoogleがpull-to-refreshライブラリの正式版をリリースしました!
という名前になっています。
SwipeRefreshLayout
サポートライブラリの中にあり、ドキュメントは
ここで
:
-
追加
SwipeRefreshLayout
をviewの親にすることで、pullとして扱われ、レイアウトが更新されます。(私はListView
を例にとれば、どのようなView
のようにLinearLayout
,ScrollView
など)<android.support.v4.widget.SwipeRefreshLayout android:id="@+id/pullToRefresh" android:layout_width="match_parent" android:layout_height="wrap_content"> <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent"/> </android.support.v4.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'
または
Refactor>>Migrate to AndroidXにアクセスすれば、Android Studioが依存関係を処理してくれます。
関連
-
[解決済み] Androidのリストビューを更新する方法は?
-
Android ProgressBarの色を変更する
-
Androidのカラーグラデーション実装のまとめ
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み] AndroidのListViewで画像を遅延ロードする方法
-
[解決済み] EclipseのAndroidプラグインで "Debug certificate expired "エラーが発生する。
-
[解決済み] Androidで画面の大きさをピクセル単位で取得する方法
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
adb devices OffLine Solution(オフラインソリューション
-
NetworkOnMainThreadException
-
java.lang.NullPointerException: NULLオブジェクト参照で仮想メソッド......を呼び出そうとしました。
-
デフォルトのアクティビティが見つからない場合の対処法
-
Android: インポートモジュールエラー Android リソースのリンクに失敗しました
-
IllegalStateException。ArrayAdapter は、リソース ID が TextView である必要があります。
-
例外「指定された子にはすでに親がいます」の解決方法。removeViewを呼び出す必要があります" の解決方法(ソースコード付き例)
-
view.getRootView()の本当の意味とテストについて
-
Android基本アプレット
-
SpinnerのOnItemSelectedListenerのonItemSelectedメソッドの4つのパラメーターの意味