0

私は最初のアプリケーションを構築しています。これは、テキスト メッセージ (SMS) によって受信されたサーバー アラームの単なるリストです。リスト ビュー アクションのみがあります (クリックの詳細はありません)。読んだだけで既読マークを付けられるようにしたいです。アプリを開くと、メッセージが古いものから新しいものの順に表示され、listView の位置が listView の一番下に設定されています。上にスクロールすると、既読としてマークしたいアイテムが表示されます。

そして、私は次のようにしました:

public class AlertsListFragment extends ListFragment {
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        // ...
        Cursor c = context.getContentResolver().query(uri, AlertsContract.PROJECTION, selection, selectionArgs, null);
        adapter = new AlertAdapter(context, R.layout.row, c, from, to, 0);
        setListAdapter(adapter);
        ListView listView = getListView();
        listView.setSelected(listView.getCount());

        lv.setOnScrollListener(new AbsListView.OnScrollListener() {
            public void onScrollStateChanged(AbsListView view, int scrollState) { }

            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                for (int i = firstVisibleItem; i < firstVisibleItem + visibleItemCount; i++) {
                    Cursor cursor = (Cursor)view.getItemAtPosition(i);
                    long id = cursor.getLong(cursor.getColumnIndex(AlertsContract._ID));
                    String type = cursor.getString(cursor.getColumnIndex(AlertsContract.TYPE));
                    Log.d("VIEWED", "This is viewed "+ type + " id: " + id);

                    // here I can get the id and mark the item read
                }
            }
        });
    }
}

しかし、これは最善の解決策ではないと思います。1 つの問題は、ユーザーがリストをスクロールしない場合、ユーザーがリストから少なくとも 3 ~ 4 個のアイテムを表示できたとしても、どのアイテムも表示済みとしてマークされないことです。

「表示」などのlistViewアイテムのイベントはありますか? listView アイテムが listView の可視領域に到達するたびに発生するイベントはありますか?

4

1 に答える 1