2012-10-11 2 views
0

첫 번째 애플리케이션을 구축 중입니다. 이것은 문자 메시지 (SMS)로받은 서버 경보 목록 일뿐입니다. 목록보기 동작 만 있습니다 (클릭에 대한 세부 정보 없음). 나는 그 (것)들을 읽는 것만으로 읽은 항목을 표시 할 수 있기를 원합니다. 내 앱을 열면 old에서 new로 정렬 된 메시지가 표시되고 listView 위치는 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의 보이는 영역에 도착할 때마다 발생할 수있는 이벤트가 있습니까?

답변

0

아마도 어댑터의 getView 방법을 사용해야합니다. (Reference)

ListView이 항목을 표시 할 때마다 호출됩니다.

하지만 항목이 완전히 표시되지 않을 때도 호출되므로 onScroll 메서드의 솔루션을 사용하여 다시 확인해야합니다.

관련 문제