我实现ListFragment从ViewPager和使用ListAdapter扩展SimpleCursorAdapter,并试图我是在转换之前使用相同的持有人格局保持到使用LoaderManager自定义光标和CommonsWare.loaderexJAR.一切似乎很好地融合在一起,除了我放在LoaderManager上面ListFragment而不是FragmentActivity托管中ViewPager.主要是因为我不知道所需的回调来加载/刷新的数据从列表中FragmentActivity,我想,以避免内存具有了一个巨大的光标,因为整体形式已经遍及所有的碎片的许多领域ViewPager.让表单的每个部分在自己的Loader中管理自己的数据似乎没问题.
当我构建类似于演示项目的Adapter Init设置时(请参阅下面的代码片段)
private void initList() {
    getHelper();        
    adapter=new PhoneNumberListAdapter(getActivity(), R.layout.phonenumber_row, null, null, null);
    setListAdapter(adapter);
    getSupportLoaderManager().initLoader(0, null, getActivity());   
}
该getSupportLoaderManager()标志为一个错误,我想不通为什么.这是片段的完整代码(我知道它是一个蹩脚的电话号码管理器).对我做错的任何指导都会很棒.
package com.code.android.myproject
import java.util.ArrayList;
import java.util.List;
import com.commonsware.cwac.loaderex.acl.SQLiteCursorLoader;
import android.support.v4.app.ListFragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.Loader;
import android.widget.SimpleCursorAdapter;
import android.content.Intent;
import android.app.AlertDialog;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.database.Cursor;
import android.view.ContextMenu;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu; …我正在使用,AsyncQueryHandler并onQueryComplete在查询完成后调用它.
我的问题:onQueryComplete在UI线程上调用?
我知道它在后台进行查询.
在哪里AsyncQueryHandler实例化是否重要?(如果在UI线程中实例化将意味着onQueryComplete将在UI线程上调用).
multithreading android android-loadermanager android-handler
目前我正在使用getContentResolver().query()/ managedQuery()来获取光标以从图库应用程序中检索图像.因为我正在使用的API部分弃用,所以我想将CursorLoader与LoaderManager一起使用.
/**
 * Creates a cursor to access the content defined by the image uri for API
 * version 11 and newer.
 * 
 * @return The created cursor.
 */
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private Cursor createCursorHoneycomb() {
    String[] projection = {
            MediaStore.Images.Media.DATA
    };
    Cursor cursor = getContentResolver().query(imageUri, projection, null, null, null);
    return cursor;
}
/**
 * Creates a cursor to access the content defined by the image uri from API
 * version 8 to 10.
 * 
 * @return The created cursor.
 */ …android android-cursor android-loadermanager android-cursorloader android-cursoradapter
我正在使用兼容包来实现API级别<11的CursorLoader根据doc和这个答案以及这个精彩的教程,我已经导入了支持包并实现了LoaderManager.LoaderCallbacks,但接下来我必须调用:
getSupportLoaderManager()
并且为此必须扩展FragmentActivity,然后从Activity Context调用,但我已经扩展了ListActivity,并且想要进行静态调用以获取LoaderManager,如下所示:
    FragmentActivity.getSupportLoaderManager()
显然,这是一种让LoaderManager <11的方法,这就是文档所说的:
要管理片段和加载器,必须使用FragmentActivity.getSupportFragmentManager()和FragmentActivity.getSupportLoaderManager()方法(而不是getFragmentManager()和getLoaderManager()方法).
但它给出了这个编译时错误:
Cannot make a static call to a non-static method
FragmentActivity的代码,getSupportLoaderManager()在这里不是静态的,这解释了错误,但为什么Doc显示静态调用...我现在很困惑......
请帮忙!
我试图在最小API为10的情况下实现CursorLoader和LoaderManager.
但是,我继续在AsyncTaskLoader.class的第63行获得IllegalArgument异常(AsyncTaskLoader.class的源代码,其中发生异常的是下面和此链接.
/* Runs on the UI thread */
@Override
protected void onPostExecute(D data) {
    if (DEBUG) Log.v(TAG, this + " onPostExecute");
    try {
        AsyncTaskLoader.this.dispatchOnLoadComplete(this, data);
    } finally {
        done.countDown();
    }
}
下面是错误的堆栈:
AsyncTaskLoader$LoadTask.onPostExecute(Object) line: 63 
AsyncTaskLoader$LoadTask(ModernAsyncTask).finish(Object) line: 461  
ModernAsyncTask.access$500(ModernAsyncTask, Object) line: 47    
ModernAsyncTask$InternalHandler.handleMessage(Message) line: 474    
ModernAsyncTask$InternalHandler(Handler).dispatchMessage(Message) line: 99  
Looper.loop() line: 137 
ActivityThread.main(String[]) line: 4424    
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
Method.invoke(Object, Object...) line: 511  
ZygoteInit$MethodAndArgsCaller.run() line: 784  
ZygoteInit.main(String[]) line: 551 
NativeStart.main(String[]) …sqlite android illegalargumentexception android-loadermanager android-cursorloader
我知道有很多这样的常见问题,但我似乎无法找到解决方案.当我尝试使用getLoaderManager().initLoader(LOADER_ID, null, this);错误初始化我的加载器时,LoaderManager类型中的方法initLoader(int,Bundle,LoaderManager.LoaderCallbacks)不适用于参数(int,null,Gridview).
这让我相信程序没有意识到Gridview实现了加载器管理器.我不知道为什么会这样,从哪里开始.我尝试过使用不同的进口,但这不起作用.我还确保我有适当的下载来支持加载器.我正在使用的代码如下.
package com.example.camerapreview;
import android.support.v4.app.LoaderManager;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.widget.CursorAdapter;
//Omissis imports
public class Gridview extends Activity implements LoaderManager.LoaderCallbacks<Cursor>{       
    private static final String TAG = "Checking Database";
    private static final String TAG1 = "Checking Thumbnail";
    Cursor cursor;
    int columnindexid;
    int columnindexdata;
    int videoidindex;
    int videopathindex;
    GridviewData entry;
    GridView gridview;
    VideoAdapter videoadapter;
    Cursor curs;
    ImageLoaderConfiguration config;
    String[] mediaColumns = {
        MediaStore.Video.Media._ID,
        MediaStore.Video.Media.DATA,
        MediaStore.Video.Media.TITLE,
        MediaStore.Video.Media.MIME_TYPE
    };
    private static final int LOADER_ID = 1;
    int …我有一个RecyclerView用于显示使用内容提供程序从内容提供程序获取的数据LoaderManager.它工作正常,但我注意到加载大数据时我的下面的实现有一些性能问题,显示数据有一个滞后,因为我使用a ViewPager加载Fragment主机这个方法
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
    Favorites = new ArrayList<>();
    if (cursor != null) {
        while (cursor.moveToNext())
            Favorites.add(FavoritesModel.fromCursor(cursor));
    }
    adapter = new FavoritesAdapter(getActivity(),Favorites);
    favoritesRecyclerView.setAdapter(adapter);
  }
所以我选择做以下事情:
 @Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
     ........
    adapter = new FavoritesAdapter(getActivity(),Favorites);
    favoritesRecyclerView.setAdapter(adapter);
    ........ 
然后在onLoadFinished上
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
    Favorites = new ArrayList<>();
    if (cursor != null) {
        while (cursor.moveToNext())
            Favorites.add(FavoritesModel.fromCursor(cursor));
    }
    adapter.notifyDataSetChanged();
  } 
使用此功能无需显示.什么是问题,因为onLoadFinished总是被调用,我知道它始终在UI线程上调用
我使用的是CursorAdapter和ContentProvider,我想用CursorLoader,所以我重新配置我的项目目标API 11,并设置分-SDK-版本7.但是它崩溃时Activity调用子Activity,它使用CursorLoader.错误NoClassDefFoundError通过IllegalStateException.  
我的问题是,即使我们有相同的配置,我们可以在以前的Android版本中使用Honeycomb API吗?
java android android-contentprovider android-loadermanager android-cursorloader
我有一个太复杂的查询,但我可以将相同的复杂查询写入两个简单查询
我想要做:
getLoaderManager().initLoader(0, null, new EntityLoader());
getLoaderManager().initLoader(0, null, new EntityCounterLoader());
这是在同一个FragmentList中可行吗?
我一直看到"应用程序可能在其主线程上做了太多工作."
这是由我下面的代码中的swapCursor()引起的吗?看起来如此:如果我删除它,上面的警告就会消失.
我仍然不明白为什么它声称是导致问题的主要线程.我已经将swapCursor()移动到各种位置,例如onLoadFinished()和loadInBackground(),但我得到了相同的结果.
如何调用swapCursor()以便不显示此警告?我使用SimpleCursorLoader的全部原因是避免占用主线程,但它仍在发生.
package com.example.sqlitetest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.LoaderManager;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
import android.support.v4.content.CursorLoader;
import android.support.v4.widget.SimpleCursorAdapter;
import android.support.v4.widget.SimpleCursorAdapter.ViewBinder;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends FragmentActivity implements LoaderManager.LoaderCallbacks<Cursor> 
{
  public static Context mContext;
  private LoaderManager.LoaderCallbacks<Cursor> mLoaderCallbacks;
  public static SQLiteDatabase      db;
  public …android android-listview simplecursoradapter android-loadermanager android-cursorloader
我已经做出了最善良的kris larson建议的更改,而我现在还没有从onCreateLoader返回正确的类型
return new StoriesLoader(getContext(), uriBuilder.toString());
StoriesLoader:
import android.content.AsyncTaskLoader;
import android.content.Context;
import java.util.List;
/**
 * Loads a list of news stories by using an AsyncTask to perform the
 * network request to the given URL.
 */
public class StoriesLoader extends AsyncTaskLoader<List<NewsStory>> {
    /** Tag for log messages */
    private static final String LOG_TAG = StoriesLoader.class.getName();
    /** Query URL */
    private String mUrl;
    /**
     * Constructs a new {@link StoriesLoader}.
     *
     * @param context of the activity
     * @param url to …我正在努力从电话中获取联系,为此,我正在使用名称和Implement LoaderCallbacks<Cursor>创建一个新类。现在,我想在创建该类的对象时自动调用loaderManager。取得联络人FetchContactsloaderManager
  public class FetchContacts implements LoaderManager.LoaderCallbacks<Cursor> {
       private Context context;
     FetchContacts(Context ctx){
        context = ctx;
        getLoaderManager().initLoader(0, null, this); // Error: Undefined method
     }  
     // Reset of code like override methods.
主要活动
     public class MainActivity extends AppCompatActivity {
        protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);
           FetchContacts fetchContacts = new FetchContacts(this);
       }
     }
我知道错误的原因,因为FetchContacts它不是从Activity类扩展的。是否有必要从Activity类扩展它,或者是否有其他方法从MainActivity调用它?