标签: android-loadermanager

将ListFragment与带有Holder Pattern的SimpleCursorAdapter一起使用

我实现ListFragmentViewPager和使用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());   

}
Run Code Online (Sandbox Code Playgroud)

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; …
Run Code Online (Sandbox Code Playgroud)

android android-loadermanager

2
推荐指数
1
解决办法
7700
查看次数

AsyncQueryHandler在ui线程上调用onQueryComplete?(Android)

我正在使用,AsyncQueryHandleronQueryComplete在查询完成后调用它.

我的问题:onQueryComplete在UI线程上调用?

我知道它在后台进行查询.

在哪里AsyncQueryHandler实例化是否重要?(如果在UI线程中实例化将意味着onQueryComplete将在UI线程上调用).

multithreading android android-loadermanager android-handler

2
推荐指数
1
解决办法
1905
查看次数

使用CursorLoader和LoaderManager从Android应用程序中检索图像

目前我正在使用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.
 */ …
Run Code Online (Sandbox Code Playgroud)

android android-cursor android-loadermanager android-cursorloader android-cursoradapter

2
推荐指数
1
解决办法
6886
查看次数

如何在ListActivity中获取LoaderManager

我正在使用兼容包来实现API级别<11的CursorLoader根据doc和这个答案以及这个精彩的教程,我已经导入了支持包并实现了LoaderManager.LoaderCallbacks,但接下来我必须调用:

getSupportLoaderManager()
Run Code Online (Sandbox Code Playgroud)

并且为此必须扩展FragmentActivity,然后从Activity Context调用,但我已经扩展了ListActivity,并且想要进行静态调用以获取LoaderManager,如下所示:

    FragmentActivity.getSupportLoaderManager()
Run Code Online (Sandbox Code Playgroud)

显然,这是一种让LoaderManager <11的方法,这就是文档所说的:

要管理片段和加载器,必须使用FragmentActivity.getSupportFragmentManager()和FragmentActivity.getSupportLoaderManager()方法(而不是getFragmentManager()和getLoaderManager()方法).

但它给出了这个编译时错误:

Cannot make a static call to a non-static method
Run Code Online (Sandbox Code Playgroud)

FragmentActivity的代码,getSupportLoaderManager()在这里不是静态的,这解释了错误,但为什么Doc显示静态调用...我现在很困惑......

请帮忙!

android android-loadermanager

1
推荐指数
1
解决办法
9945
查看次数

Android CursorLoader和LoaderManager错误

我试图在最小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();
    }
}
Run Code Online (Sandbox Code Playgroud)

下面是错误的堆栈:

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[]) …
Run Code Online (Sandbox Code Playgroud)

sqlite android illegalargumentexception android-loadermanager android-cursorloader

1
推荐指数
1
解决办法
3876
查看次数

LoaderManager没有初始化... getLoaderManager().initLoader的问题

我知道有很多这样的常见问题,但我似乎无法找到解决方案.当我尝试使用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 …
Run Code Online (Sandbox Code Playgroud)

android loader android-loadermanager

1
推荐指数
1
解决办法
3898
查看次数

将RecyclerView与来自LoaderManager的数据一起使用

我有一个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);
  }
Run Code Online (Sandbox Code Playgroud)

所以我选择做以下事情:

 @Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
     ........
    adapter = new FavoritesAdapter(getActivity(),Favorites);
    favoritesRecyclerView.setAdapter(adapter);
    ........ 
Run Code Online (Sandbox Code Playgroud)

然后在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();

  } 
Run Code Online (Sandbox Code Playgroud)

使用此功能无需显示.什么是问题,因为onLoadFinished总是被调用,我知道它始终在UI线程上调用

android android-loadermanager android-recyclerview

1
推荐指数
1
解决办法
7485
查看次数

使用11之前的Loader em API版本

我使用的是CursorAdapterContentProvider,我想用CursorLoader,所以我重新配置我的项目目标API 11,并设置分-SDK-版本7.但是它崩溃时Activity调用子Activity,它使用CursorLoader.错误NoClassDefFoundError通过IllegalStateException.

我的问题是,即使我们有相同的配置,我们可以在以前的Android版本中使用Honeycomb API吗?

java android android-contentprovider android-loadermanager android-cursorloader

0
推荐指数
1
解决办法
1671
查看次数

可以调用getLoaderManager().initLoader两次

我有一个太复杂的查询,但我可以将相同的复杂查询写入两个简单查询

我想要做:

getLoaderManager().initLoader(0, null, new EntityLoader());
getLoaderManager().initLoader(0, null, new EntityCounterLoader());
Run Code Online (Sandbox Code Playgroud)

这是在同一个FragmentList中可行吗?

android android-loadermanager

0
推荐指数
1
解决办法
591
查看次数

swapCursor()slow:"应用程序可能在其主线程上做了太多工作."

我一直看到"应用程序可能在其主线程上做了太多工作."

这是由我下面的代码中的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 …
Run Code Online (Sandbox Code Playgroud)

android android-listview simplecursoradapter android-loadermanager android-cursorloader

0
推荐指数
1
解决办法
1054
查看次数

如何让loaderManager.initLoader在片段中工作?

我已经做出了最善良的kris larson建议的更改,而我现在还没有从onCreateLoader返回正确的类型

return new StoriesLoader(getContext(), uriBuilder.toString());
Run Code Online (Sandbox Code Playgroud)

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 …
Run Code Online (Sandbox Code Playgroud)

android android-loadermanager

0
推荐指数
1
解决办法
7785
查看次数

从不是Activity的类中调用LoaderManager

我正在努力从电话中获取联系,为此,我正在使用名称和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.
Run Code Online (Sandbox Code Playgroud)

主要活动

     public class MainActivity extends AppCompatActivity {
        protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);
           FetchContacts fetchContacts = new FetchContacts(this);
       }
     }
Run Code Online (Sandbox Code Playgroud)

我知道错误的原因,因为FetchContacts它不是从Activity类扩展的。是否有必要从Activity类扩展它,或者是否有其他方法从MainActivity调用它?

android android-loadermanager

0
推荐指数
1
解决办法
1872
查看次数