2017-08-26 91 views
1

我对使用Loader有疑问。 在我的情况,我把我自己的类,它扩展AsyncTaskLoader并返回MyObject来的List我可以在同一活动中同时运行多个装载机吗?

public class MyActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<List<MyObject>> { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     ... 
     getLoaderManager().initLoader(1, null, this); 
     getLoaderManager().initLoader(2_ID, null, this); 
     getLoaderManager().initLoader(3_ID, null, this); 
     ... 
    } 

} 

我的问题是:我可以在同一时间在同一Activity运行许多Loader

每个加载程序,当其loadInBackground()方法完成后,请致电方法在我的Activity中强制执行?

预先感谢您。

回答

1

是的,我们可以在与唯一ID一个活动的时间运行许多装载机,装载机因为是一个异步过程。请在下面找到示例模板。

public class SampleActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor> { 
    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.sample); 
     initLoaders(); 
    } 

    private void initLoaders() { 
     getLoaderManager().initLoader(1, null, null); 
     getLoaderManager().initLoader(2, null, null); 
     getLoaderManager().initLoader(3, null, null); 
    } 

    @Override 
    public Loader<Cursor> onCreateLoader(int id, Bundle args) { 
     CursorLoader cursorLoader = null; 
     switch (id) { 
      case 1: 
       cursorLoader = new CursorLoader(this, CONTENT_URI, 
         PROJECTION, selection, null, null); 
       break; 

      case 2: 
       cursorLoader = new CursorLoader(this, CONTENT_URI, 
         PROJECTION, selection, null, null); 
       break; 

      case 3: 
       cursorLoader = new CursorLoader(this, CONTENT_URI, 
         PROJECTION, selection, null, null); 
       break; 
     } 
     return cursorLoader; 
    } 

    @Override 
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 
     switch (loader.getId()) { 
      case 1: 
       if (data != null && data.getCount() > 0) 
        setData1(); 
       break; 

      case 2: 
       if (data != null && data.getCount() > 0) 
        setData2(); 
       break; 

      case 3: 
       if (data != null && data.getCount() > 0) 
        setData3(); 
       break; 
     } 
    } 

    @Override 
    public void onLoaderReset(Loader<Cursor> loader) { 

    } 
} 
+0

谢谢你的男人:) – MDP

相关问题