我正在构建我的第一个应用程序。它只是通过短信 (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
}
}
});
}
}
但我认为,这不是最好的解决方案。一个问题是,如果用户不打算滚动列表,则即使用户可以从列表中看到至少 3 到 4 个项目,也不会将任何项目标记为已查看。
listView 项目是否有任何事件,如“显示”或类似的东西?每次listView项目到达listView的可见区域时都会发生的一些事件?