Androidでのスワイプダウンおよびスワイプアップイベントの実装

スワイプダウンによるリフレッシュとスワイプアップによるデータロードは、Androidアプリ開発において頻繁に使用される機能です。本記事では、これらの効果を第三者ライブラリを使用してどのように実現するかについて説明します。

以下は、実装後の動作イメージです:

  • スワイプダウンでリフレッシュ
  • スワイプアップで追加データの読み込み

必要なライブラリは次のリンクから入手できます:XListView-Android。ライブラリをダウンロード後、プロジェクトに統合し、以下の手順に従ってください。

カスタムActivityの実装

public class SwipeActivity extends Activity implements IXListViewListener {

    private XListView listView;
    private ArrayAdapter<String> adapter;
    private ArrayList<String> dataList = new ArrayList<>();
    private Handler handler = new Handler();
    private int dataStartIndex = 0; // データの開始位置
    private static int refreshCount = 0; // リフレッシュ回数

    private Date currentDate;
    private SimpleDateFormat timeFormat = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.swipe_main);

        generateData();
        listView = (XListView) findViewById(R.id.custom_xlistview);

        listView.setPullLoadEnable(true); // スワイプアップ有効化
        listView.setPullRefreshEnable(true); // スワイプダウン有効化

        adapter = new ArrayAdapter<>(this, R.layout.item_layout, dataList);
        listView.setAdapter(adapter);

        listView.setRefreshTime(timeFormat.format(new Date())); // 最終更新時刻設定
        listView.setXListViewListener(this);

        handler = new Handler();
    }

    private void generateData() {
        for (int i = 0; i < 20; i++) {
            dataList.add("リフレッシュ回数 " + (++dataStartIndex));
        }
    }

    private void updateUI() {
        listView.stopRefresh();
        listView.stopLoadMore();
        listView.setRefreshTime(timeFormat.format(new Date()));
    }

    @Override
    public void onRefresh() {
        handler.postDelayed(() -> {
            dataStartIndex = ++refreshCount;
            dataList.clear();
            generateData();
            adapter.notifyDataSetChanged();
            updateUI();
        }, 2000);
    }

    @Override
    public void onLoadMore() {
        handler.postDelayed(() -> {
            generateData();
            adapter.notifyDataSetChanged();
            updateUI();
        }, 2000);
    }
}

レイアウトファイル (swipe_main.xml)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#f5f5f5">

    <me.maxwin.view.XListView
        android:id="@+id/custom_xlistview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:cacheColorHint="#00000000" />
</LinearLayout>

これで基本的な実装が完了しました。プロジェクトを実行して動作確認を行いましょう。

タグ: Android XListView IXListViewListener

6月22日 18:43 投稿