我正在构建我的第一个应用程序。它只是文本消息(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的可见区域时都会发生一些事件?
答案 0 :(得分:0)
也许您应该尝试使用适配器的getView
方法。 (Reference)
每次ListView
尝试显示项目时都会调用它。
但要小心,当项目未完全显示时也会调用它,因此您应该再次检查,也许使用onScroll方法中的解决方案。