Android 如何从非活动的类调用getLoaderManager()?

Android 如何从非活动的类调用getLoaderManager()?,android,asynctaskloader,Android,Asynctaskloader,我有一个带有Listview的片段,里面有一个ImageView和一个Textview。因此,当片段创建时,我调用AsyncTaskLoader来填充它。在onLoadFinished方法中,我为列表设置了适配器。问题是我无法访问getLoadedManager:S 代码如下: 这是第一个任务中的onLoadFinishedMethod public void onLoadFinished(Loader<ArrayList<Entrada>> loader, ArrayL

我有一个带有Listview的片段,里面有一个ImageView和一个Textview。因此,当片段创建时,我调用AsyncTaskLoader来填充它。在onLoadFinished方法中,我为列表设置了适配器。问题是我无法访问getLoadedManager:S

代码如下: 这是第一个任务中的onLoadFinishedMethod

public void onLoadFinished(Loader<ArrayList<Entrada>> loader, ArrayList<Entrada> entradas) {
    //progress.setVisibility(View.GONE);
    entradaAdapter adapter = new entradaAdapter(getActivity(), entradas);
    ListView entradas_list = (ListView)rootView.findViewById(R.id.entries_list);
    entradas_list.setAdapter(adapter);
    for (Entrada e : entradas) {
        e.loadImagen(adapter);
    }
}
public void onLoadFinished(加载程序,ArrayList entradas){
//progress.setVisibility(View.GONE);
entradadapter=新的entradadapter(getActivity(),entradas);
ListView entradas_list=(ListView)rootView.findViewById(R.id.entries_list);
entradas_list.setAdapter(适配器);
对于(Entrada e:entradas){
e、 loadImagen(适配器);
}
}
适配器:

class entradaAdapter extends ArrayAdapter<Entrada> {
private final ArrayList<Entrada> lista;
LayoutInflater inflater;
public entradaAdapter(Context context, ArrayList<Entrada> lista) {
    super(context, 0, lista);
    this.lista = lista;
    inflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    final ViewHolder holder;
    final Entrada e = getItem(position);
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.entrada, null);
    }

    holder = new ViewHolder();
    holder.nombre = (TextView) convertView.findViewById(R.id.text_entryTitle);
    holder.imagen = (ImageView) convertView.findViewById(R.id.imageEntry);

    holder.nombre.setText(e.getNombre());

    if (e.getImage() != null) {
        Drawable d = new BitmapDrawable(getContext().getResources(),e.getImage());
        holder.imagen.setScaleType(ImageView.ScaleType.CENTER_CROP);
        holder.imagen.setImageDrawable(d);
    }
    return convertView;
}

class ViewHolder {
    TextView nombre;
    ImageView imagen;
}

public int getCount() {
    return lista.size();
}

public Entrada getItem(int arg0) {
    return lista.get(arg0);
}

public long getItemId(int position) {
    return position;
}
}
class EntradAdapter扩展了ArrayAdapter{
私人最终ArrayList lista;
充气机;
公共数据适配器(上下文,ArrayList lista){
super(context,0,lista);
this.lista=lista;
充气器=充气器。从(上下文);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
最终持票人;
最终进入e=获取项目(位置);
if(convertView==null){
convertView=充气机充气(R.layout.entrada,空);
}
holder=新的ViewHolder();
holder.nombre=(TextView)convertView.findViewById(R.id.text\u entryTitle);
holder.imagen=(ImageView)convertView.findViewById(R.id.imageEntry);
holder.nombre.setText(e.getNombre());
如果(如getImage()!=null){
Drawable d=新的BitmapDrawable(getContext().getResources(),e.getImage());
holder.imagen.setScaleType(ImageView.ScaleType.CENTER\U裁剪);
图像可设置图像绘制的支架(d);
}
返回视图;
}
类视图持有者{
文本视图名称;
ImageView imagen;
}
public int getCount(){
返回lista.size();
}
公共Entrada getItem(int arg0){
返回lista.get(arg0);
}
公共长getItemId(int位置){
返回位置;
}
}
“Entrada”类

class Entrada implements android.support.v4.app.LoaderManager.LoaderCallbacks<Bitmap> {
private String imgUrl, nombre,categoria;
private Bitmap image;
private entradaAdapter adapter;
Context context;
public Entrada(Context context, String nombre, String categoria, String imgFile) {
    this.context = context;
    this.nombre = nombre;
    this.categoria = categoria;
    this.imgUrl = "http://erasmusapp.byethost13.com/images/entries/"+imgFile;
}
@Override
public Loader<Bitmap> onCreateLoader(int id, Bundle args) {
    return new ImageLoadTask(context,imgUrl);
}
@Override
public void onLoadFinished(Loader<Bitmap> loader, Bitmap bitmap) {
    if (bitmap != null) {
        image = bitmap;
        if (adapter != null) {
            adapter.notifyDataSetChanged();
        }
    }
}

@Override
public void onLoaderReset(Loader<Bitmap> loader) {
}
public String getImgUrl() {
    return imgUrl;
}
public String getNombre() {
    return nombre;
}

public String getCategoria(){return categoria;}
public void setImgUrl(String imgUrl) {
    this.imgUrl = imgUrl;
}

public Bitmap getImage() {
    return image;
}

public entradaAdapter getAdapter() {
    return adapter;
}

public void setAdapter(entradaAdapter adapter) {
    this.adapter = adapter;
}

public void loadImagen(entradaAdapter adapter){
    this.adapter = adapter;
    if (imgUrl != null && !imgUrl.equals("")) {
        getLoaderManager().initLoader(0, null, this);
    }
}
}
class Entrada实现了android.support.v4.app.LoaderManager.LoaderCallbacks{
私有字符串imgUrl、nombre、categoria;
私有位图图像;
专用适配器;
语境;
公共Entrada(上下文上下文、字符串名称、字符串分类、字符串imgFile){
this.context=上下文;
this.nombre=nombre;
this.categoria=categoria;
this.imgUrl=”http://erasmusapp.byethost13.com/images/entries/“+imgFile;
}
@凌驾
公共加载器onCreateLoader(int-id,Bundle-args){
返回新的ImageLoadTask(上下文,imgUrl);
}
@凌驾
public void onLoadFinished(加载程序、位图){
if(位图!=null){
图像=位图;
if(适配器!=null){
adapter.notifyDataSetChanged();
}
}
}
@凌驾
公共void onLoaderReset(加载器){
}
公共字符串getImgUrl(){
返回图像;
}
公共字符串getNombre(){
返回nombre;
}
公共字符串getCategoria(){return categoria;}
公共void setImgUrl(字符串imgUrl){
this.imgUrl=imgUrl;
}
公共位图getImage(){
返回图像;
}
公共适配器getAdapter(){
返回适配器;
}
公共void setAdapter(entradadapter适配器){
this.adapter=适配器;
}
public void loadImagen(entradadapter适配器){
this.adapter=适配器;
if(imgUrl!=null&!imgUrl.equals(“”){
getLoaderManager().initLoader(0,null,this);
}
}
}
第二项任务是:

class ImageLoadTask extends AsyncTaskLoader<Bitmap> {
String imgUrl;
Bitmap mBitmap;
public ImageLoadTask(Context context, String imgUrl){
    super(context);
    this.imgUrl = imgUrl;
}
@Override
protected void onStartLoading() {
    if (mBitmap != null) {
        deliverResult(mBitmap);
    }else {
        forceLoad();
    }
}

@Override
protected void onStopLoading() {
    cancelLoad();
}
public Bitmap loadInBackground() {

    Bitmap b = null;
    try {
        try {
            URL url = new URL(imgUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input = connection.getInputStream();
            b = BitmapFactory.decodeStream(input);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return b;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}
@Override
public void deliverResult(Bitmap bitmap) {
    mBitmap = bitmap; // Caching
    super.deliverResult(mBitmap);
}
@Override
protected void onReset() {
    super.onReset();
    onStopLoading();
    mBitmap = null;
}
类ImageLoadTask扩展了AsyncTaskLoader{
字符串imgUrl;
位图mBitmap;
公共ImageLoadTask(上下文,字符串imgUrl){
超级(上下文);
this.imgUrl=imgUrl;
}
@凌驾
开始加载时受保护的void(){
如果(mBitmap!=null){
交付结果(mBitmap);
}否则{
力载荷();
}
}
@凌驾
受保护的无效onStopLoading(){
取消加载();
}
公共位图加载背景(){
位图b=null;
试一试{
试一试{
URL=新URL(imgUrl);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream输入=连接。getInputStream();
b=位图工厂.解码流(输入);
}捕获(IOE异常){
e、 printStackTrace();
}
返回b;
}捕获(例外e){
e、 printStackTrace();
返回null;
}
}
@凌驾
公共void deliverResult(位图){
mBitmap=bitmap;//缓存
超级交付结果(mBitmap);
}
@凌驾
受保护的void onReset(){
super.onReset();
onStopLoading();
mBitmap=null;
}

}

其中是对
getLoaderManager().initLoader(LOADER_ID,null,callback)的调用?1<代码>新ImageLoadTask(上下文,imgUrl)将不会开始加载。。。2. <代码>异步任务加载器
用于
加载器
。。。对于像这样的作业,应使用
AsyncTask
。仍然加载所有图像迟早会导致内存溢出。。。请使用一些(已经编写的)图像加载程序…@njzk2查看
loadImagen
方法。。。问题是他想用AsyncTaskLoader来完成错误的任务哦,这是一个没有loader的AsyncTask,我忘了更改那一行,对不起。所以我的问题是其他,现在,我会更新后
Entrada
应该是一个POJO类。。。你在混合原则。。。如果它是一个简单的数据容器,它不应该负责加载。。。