2013-03-10 3 views
1

목록이 업데이트 될 때마다 목록의 맨 아래로 강제 스크롤되는 목록보기가 있습니다. 그러나 목록 맨 아래로 스크롤 한 후 어떤 이유로 목록보기가 고정되고 사용자가 목록에서 앞뒤로 스크롤하여 다른 데이터를 볼 수 없습니다.setSelection 후 스크롤 목록보기 허용

질문 : setSelection(list.getBottom()) 이후에 전체 목록을 다시 스크롤 할 수있게하려면 어떻게해야합니까?

@Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
     /* the list is being populated here - the code has been omitted */   

      list.populateFrom(date, name, class); 
      list.clearFocus(); 
      list.post(new Runnable() { 

       @Override 
       public void run() { 

        list.setSelection(list.getBottom()); 
       } 
      }); 


     return list; 
    } 
} 

답변

3

문제는 ListView에 그린 더보기 필요 매번 라고 당신이 getView()

list.setSelection(list.getBottom()); 

를 요구하고 있다는 사실에있다. 이것은 당신이 계속해서 아래로 스크롤한다는 것을 의미합니다.

대신, 업데이트 데이터는 외부 (예 : Activity/Fragment에서와 같은) Adapter 클래스에서, 다음 setSelection()를 호출 후, ListView의 어댑터를 다시 설정하거나 어댑터를 취소하고 항목을 다시 추가 중 하나가 설정합니다. 이 작업을 수행하는

한 가지 방법은 :

  • ActivityAsyncTask

  • AsyncTaskdoInBackground()를 통해 데이터의 List를 업데이트 시작합니다. onPostExecute()에서

  • doInBackground()로부터 전달 ListAdapter 인스턴스화. 또는 현재 가지고있는 Adapter의 데이터 세트를 삭제 한 다음 목록을 반복하고 항목을 Adapter에 다시 추가하십시오.

  • Adapter을 다시 인스턴스화하려면 ListViewAdapter을 생성 한 것으로 설정하십시오.

  • 전화 ListView#setSelection()

+1

감사 upvote에 없어! 나는 다른 곳에서 내 setSelction을 움직 였고 이제는 완벽하게 작동합니다 :) – BurninatorDor

+0

당신을 환영합니다! 그것이 작동한다는 것을 듣기 좋은 :-) –

0
cus= new Customlistadapter(paramets for customer adapter));//Custom list adapter 
    lv1 = (ListView) findViewById(R.id.list); 
    lv1.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); 
    lv1.setStackFromBottom(true); 
    cus.notifyDataSetChanged();// for refreshing listview with updates 
    lv1.setAdapter(cus); 
    cus.registerDataSetObserver(new DataSetObserver() { 
    @Override 
    public void onChanged() { 
    super.onChanged(); 
    lv1.setSelection(cus.getCount() - 1);  
    } 
}); 

는 활동 클래스의 위의를 사용합니다. A - C가 문제를 지적했습니다.

활동 클래스에서 AysncTask를 사용하는 경우 아래 코드를 시도하십시오. (A)에 의해 제안 된 바와 같이

private class DownloadFilesTask extends AsyncTask<Void, Void, VOid> { 
protected void onPreExecute() 
{ 
    //display progress dialog 
} 
protected Long doInBackground(Void... params) { 
    // get data from server 
    return null; 
} 


protected void onPostExecute(Void params) { 
    // dismiss dialog 
    //set data 
    // paste the above listview code here. 
} 

}

0

- C, 그것은

list.setSelection 함께 문제 (list.getBottom());

getView()가 호출 될 때마다 뷰를 아래로 이동/스크롤 할 때마다 뷰를 다시 스크롤하려고하면 getView()가 호출되고 다시 아래로 이동합니다 . 그래서 listview의 선택을 getView()의 맨 아래로 설정하는 대신 activity/fragment에서 수행해야합니다. 활동 중에 변경 사항을 관찰하고 선택 사항을 맨 아래에 설정하십시오. 이 문제에 대한 도움이 설명이 있었다면

, 멋진 설명은

관련 문제