2014-11-25 35 views
0

我无法使用的CursorAdapter的CursorAdapter的Ne​​wView的功能不会被解雇

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_local_screen, 
      container, false); 


    Bundle data = new Bundle(); 
    data.putStringArray("PROJECTION", new String [] { 
     MediaStore.Video.VideoColumns._ID, 
     MediaStore.Video.VideoColumns.BUCKET_DISPLAY_NAME, 
     MediaStore.Video.VideoColumns.BUCKET_ID, 
     MediaStore.Video.VideoColumns.DATE_TAKEN, 
     MediaStore.Video.VideoColumns.DATE_ADDED, 
     MediaStore.Video.VideoColumns.DESCRIPTION, 
     MediaStore.Video.VideoColumns.DURATION}); 

    data.putString("SELECTION", null); 
    data.putStringArray("SELECTIONARRAY", null); 
    data.putString("SORTORDER", MediaStore.Video.VideoColumns.BUCKET_DISPLAY_NAME + " LIMIT " + mLimit); 

    VideoCursorAdapter adapter = new VideoCursorAdapter(getActivity(),null,true); 
    LocalVideos videos = new LocalVideos(getActivity(), adapter); 
    getLoaderManager().initLoader(LocalVideos.LoaderID.THUMBNAIL.getID(), data, videos); 

    ListView listView = (ListView)rootView.findViewById(R.id.listVideos); 
    listView.setAdapter(adapter); 

    videos.setView(listView); 

当上面的代码我设置装载mediastore数据参数发射的NewView的功能。使用videoCursorAdapter设置listView。

在LoadVideos中,我有一个游标加载器来加载游标并将其传递给游标加载器。

@Override 
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) { 
    // TODO Auto-generated method stub 
    if (LoaderID.THUMBNAIL.getID() == arg0) 
     return new CursorLoader(mContext, 
           MediaStore.Video.Media.EXTERNAL_CONTENT_URI, 
           (String[])arg1.getStringArray("PROJECTION"), 
           arg1.getString("SELECTION"), 
           (String[])arg1.getStringArray("SELECTIONARRAY"), 
           arg1.getString("SORTORDER")); 
    return null; 
} 

@Override 
public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) { 
    // TODO Auto-generated method stub 
    Log.w("ALBUM", "id="+arg0.getId() + " " + LoaderID.THUMBNAIL.getID() + " " + arg1.getCount()); 
    if (LoaderID.THUMBNAIL.getID() == arg0.getId()) 
     mAdapter.swapCursor(arg1); 
    mView.invalidate(); 
} 

该代码确实在光标中打印了10个数据。不知何故,没有错误。但newView函数没有受到影响。

+0

你是否检查了所有的THUMBNAIL.getID()都获得了相同的值? – chartsai 2014-11-25 04:31:33

+0

我检查过Thumbnail.getID和arg0.getID是一样的。 swapCursor确实被调用。 – LittleFunny 2014-11-25 05:03:43

回答

0

newView并不总是被命中,适配器只在必要时调用newView()。 (例如,在交换光标后列表中的项目增加)
(如果您有实施BaseAdapter的经验,则可以认为convertView只在空值时构造)
您可以检查CursorAdapter的the source code以确认。

+0

VideoCursorAdapter adapter = new VideoCursorAdapter(getActivity(),null,true);我有一个代码初始化VideoCursorAdapter,它将光标设置为null。然后我使用swapCursor从null交换到新的游标。 – LittleFunny 2014-11-25 05:06:00

+0

uhmm ...适配器中的getView()被击中多少次? – chartsai 2014-11-25 05:35:19

+0

我该如何检查?我只需要实现newView和bindView – LittleFunny 2014-11-25 05:39:08