2011-05-06 6 views
0

정말 이해할 수없는 이상한 버그가 있습니다. 다음은 비디오 형식의 동작입니다. http://www.youtube.com/watch?v=hHuUzNDI68wListView는 키보드가 숨겨져있을 때 항목을 잘못된 위치에 재활용합니다.

이제 설명하십시오. 나는 NewsFeed라는 활동을하고있다. 피드 항목의 ListView (각 캐스팅 클래스를 사용하여로드하는 URL에서 오는 사진이 있고 옆에 일부 텍스트가 있음)로 구성되어 있습니다.이 활동을 normaly로 열면 모든 것을 스크롤 할 때 모든 것이 올바르게됩니다. 예상대로 작동합니다. 처음 검색 키를 누르면 키보드가 나타나고 검색 결과에서 무언가를 선택하면 NewsFeed 활동이 열립니다 처음에 나타나면 키보드가 여전히 켜져 있고 나중에 키보드가 두 번째로 나옵니다 마지막 결과는 아래쪽에있는 2 개의 이미지가 동일하다는 것입니다 (일치해서는 안됩니다).

일부 디버깅을 통해 몇 가지 이유로 상위 2 행의 viewHolder가 동일한 객체 두 번째 이동 (키보드가 마침내 없어지면)

public View getView (int position, View convertView, ViewGroup parent) { 

     final HashMap<String, Object> game = getItem(position); 
     CollapsedNewsHolder collapsedNewsHolder; 
     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.news_collapsed_module, null); 
      collapsedNewsHolder = new CollapsedNewsHolder(); 
      collapsedNewsHolder.newsPicture = (ImageView) convertView.findViewById(R.id.NewsPicture); 
      collapsedNewsHolder.progress = (ProgressBar) convertView.findViewById(R.id.Progress); 
      collapsedNewsHolder.title = (TextView) convertView.findViewById(R.id.title); 
      collapsedNewsHolder.newsPerson = (TextView) convertView.findViewById(R.id.newsPerson); 
      collapsedNewsHolder.upCount = (TextView) convertView.findViewById(R.id.upCount); 
      collapsedNewsHolder.commentCount = (TextView) convertView.findViewById(R.id.commentCount); 
      collapsedNewsHolder.relativeTime = (TextView) convertView.findViewById(R.id.RelativeTime); 
      collapsedNewsHolder.setTypeface(); 

      //collapsedNewsHolder.imageCallback = new MyImageCallback(mActivity, collapsedNewsHolder.newsPicture, collapsedNewsHolder.progress, MyImageCallback.SMALL, 200); 
      //collapsedNewsHolder.itemClickListener = new ItemClickListener(); 

      convertView.setTag(collapsedNewsHolder); 
     } else 
      collapsedNewsHolder = (CollapsedNewsHolder) convertView.getTag(); 

     if ((Integer) getItem(position).get("type") != NewsFeed.POSTER) 
      collapsedNewsHolder.title.setTextSize(13f); 

     collapsedNewsHolder.newsPicture.setImageBitmap(null); 
     collapsedNewsHolder.progress.setVisibility(View.VISIBLE); 
     ImageUtil.imageCache.loadAsync((String) game.get("img"), new MyImageCallback(mActivity, collapsedNewsHolder.newsPicture, collapsedNewsHolder.progress, MyImageCallback.SMALL, 200), mContext); 

     collapsedNewsHolder.title.setText((String) game.get("title")); 
     collapsedNewsHolder.newsPerson.setText((String)game.get("newsPerson")); 

     collapsedNewsHolder.relativeTime.setText((String) game.get("relativeTime")); 
     collapsedNewsHolder.upCount.setText((Integer) game.get("upCount") + ""); 
     collapsedNewsHolder.commentCount.setText((Integer) game.get("commentCount") + ""); 
     //convertView.setOnClickListener(collapsedNewsHolder.itemClickListener.set((String) game.get("id"), position)); 
     convertView.setOnClickListener(new ItemClickListener((String) game.get("id"), position)); 
     return convertView; 
    } 

또한 여기에 문제를 설명하는 오류 로그가 있습니다. 목록의 위치와 관련하여 메모리 위치와 이미지 URL을 기록하십시오.

05-05 17:34:54.774: ERROR/NewsFeedAdapter(7101): Position- 0 Image- [email protected] Loading image- http://lh3.ggpht.com/o0vA6-MRGAXhhYYkPa1xf3WsPlDe4XnK2xWZeMhmXKBQI8eHGTAos0l1zqC_nox2MrRHKcCKNnPgzqLctsqh25e3LMc=s500 

05-05 17:34:54.804: ERROR/NewsFeedAdapter(7101): Position- 1 Image- [email protected] Loading image- http://lh6.ggpht.com/RcTe-3O-Rywdp0zizVx6k6lSEuPpYbDYnu1UoEnWbhLk6BzwzXt29BvK5rMPAqkrhgtvxvddSTL3pBnMDeLIXVV3s0EZng=s500 

05-05 17:34:55.154: ERROR/NewsFeedAdapter(7101): Position- 0 Image- [email protected] Loading image- http://lh3.ggpht.com/o0vA6-MRGAXhhYYkPa1xf3WsPlDe4XnK2xWZeMhmXKBQI8eHGTAos0l1zqC_nox2MrRHKcCKNnPgzqLctsqh25e3LMc=s500 

05-05 17:34:55.174: ERROR/NewsFeedAdapter(7101): Position- 1 Image- [email protected] Loading image- http://lh6.ggpht.com/RcTe-3O-Rywdp0zizVx6k6lSEuPpYbDYnu1UoEnWbhLk6BzwzXt29BvK5rMPAqkrhgtvxvddSTL3pBnMDeLIXVV3s0EZng=s500 

05-05 17:34:55.304: ERROR/NewsFeedAdapter(7101): Position- 2 Image- [email protected] Loading image- http://lh4.ggpht.com/V95vJI4WHUUluC8_jHaJw011U6RO7I9rVBQsdSvwDrnUrOCN2YvqhHftr7o0YMNv8cIEBEjsnLNvIH0Y1KoB-rzw6hrKiQ=s500 

05-05 17:34:55.334: ERROR/NewsFeedAdapter(7101): Position- 3 Image- [email protected] Loading image- http://lh3.ggpht.com/-c7Ss0t2luOD-npAFZcjRYbnuasqjUNTOv75pFhyprhyzGDf8QdIz_PrJS5qcmBb0a5xrXzZWZYH7oc06eo=s500 

05-05 17:34:55.384: ERROR/NewsFeedAdapter(7101): Position- 4 Image- [email protected] Loading image- http://lh3.ggpht.com/iCKp7kwcnbnZGD4vBb-Mz_mtSKPvST-YGeekJ9khljpG-Ua5Kl71ETdn8LLulULmq9fgNy8huooi_CfrT4W3gjqoFhiB=s500 
+1

사용자가 검색 키를 누를 때 실제로 일어나는 일에 대한 통찰력을 추가 할 수 있습니까? 수업 시작인가요? 결과가 클릭되면 어떻게되는지, 같은 의도로 호출하고 있습니까? – sgarman

+0

검색 키 (하드 키)를 누르면 [기본 인터페이스] (http://developer.android.com/guide/topics/search/search-dialog.html)가 열립니다. 그런 일이 발생하면 사용자에게 검색 창과 몇 가지 제안 사항이 표시됩니다. 사용자가 추천 업데이트에 물건을 입력 할 때. 추천을 클릭하면 NewsFeed 클래스에 대한 의도가 시작되고 검색 활동이 완료됩니다. – Leo

+0

라이프 사이클 이벤트, onstop, onstart, onpause, onresume을 로그 아웃해야합니다. 나는 이것이 열려 있고 이전 데이터와 새로운 데이터를 혼합하는 동안 이것이 활동 (결과 활동)을 호출하는 문제라고 생각하고 있습니다. – sgarman

답변

1

나는 비슷한 문제가있다. 나는 android:windowSoftInputModeadjustPan으로 설정하여 해결했습니다.

관련 문제