投稿

ラベル(ListView)が付いた投稿を表示しています

【Android】ListViewで最終行までスクロールしたことを判定する

ListViewにデータの一部を表示し、最終行までスクロールした際に追加で読み込み処理を入れたいときに判定するためのロジックです。 以前作成した ListViewアプリケーション がありますので、これを使って最終行までスクロールしたときに処理を入れてみたいと思います。 https://www.s-watanabe.work/2020/12/androidcheckbox.html 実装 方法としてはsetOnScrollListenerのonScrollメソッド内で引数の値を確認して判定します。onScrollメソッドの引数は以下です。 AbsListView absListView - スクロール中のView (今回は使用しない) int firstVisibleItem - 先頭のindex int visibleItemCount - 見えている件数 int totalItemCount - ListViewのItem総件数 ※公式ドキュメントは以下です。 https://developer.android.com/reference/android/widget/AbsListView.OnScrollListener#public-methods_1 onScrollメソッドで最終行まで到達したことを判定する // メンバー変数 Boolean isLastLine = false; (省略) listView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView absListView, int i) { // } @Override public void onScroll(AbsListView absListView, int firstVisibleItem, int

【Android】カスタムリストビューにCheckBoxを追加したとき別の行までチェックされる事象の対応

AndroidでCheckBox付きのカスタムListViewを実装し、動作確認したところチェックした行以外の行までチェックされてしまう謎現象が発生しました。 カスタムListViewの実装については以下参照 【Android】VideoViewを使って動画再生アプリを作る③ -- カスタムリストビュー -- 今回は単純にチェックボックスと単純な名前を一つだけ持ったListを表示しています。 問題のあるコード Adapterクラス public class ListAdapter extends ArrayAdapter<String> { private int resource; private List<String> items; private LayoutInflater inflater; public ListAdapter(Context context, int resource, List<String> items) { super(context, resource, items); this.resource = resource; this.items = items; this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public View getView(int position, View convertView, ViewGroup parent) { View view; if (convertView != null) { view = convertView; } else { view = inflater.inflate(resource, null); } TextView itemName = view.findViewById(R.id.item_name)

【Android】VideoViewを使って動画再生アプリを作る③
-- カスタムリストビュー --

イメージ
ListViewコントロールをカスタマイズして、1つのレコードに様々な情報を表示する方法です。 実装 アイテムクラス まずはListViewの1レコードを表すアイテムクラスの定義です。次の属性を持ちます。 ファイル名 ディレクトリ サイズ 最終更新日 Item.java import java.util.Date; public class Item { private String name; private String path; private long size; private Date lastModified; public void setName(String name) { this.name = name; } public String getName() { return name; } public void setPath(String path) { this.path = path; } public String getPath() { return path; } public void setSize(long size) { this.size = size; } public long getSize() { return size; } public void setLastModified(Date lastModified) { this.lastModified = lastModified; } public Date getLastModified() { return lastModified; } } レイアウト 1レコード分のレイアウトを定義します。 layout/list_item.xml <?xml version="1.0" encoding="utf-8"?> <LinearLay