2012-04-12 10 views
0

フラグメント内のグリッドビューに画像を表示しようとしていて、画像が非同期タスクローダー内でランタイムにダウンロードされ、同じフラグメント内のベース・アダプターを使用しています。フラグメント内でasynctaskローダーを使用して、グリッドビューに画像を表示しているときにアニメーションローダーが表示されない

イメージがロードされているのにローダーアニメーションが表示されていない限り、すべてが正常に機能しています。

<?xml version="1.0" encoding="utf-8"?> 
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gridview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:numColumns="auto_fit" 
    android:verticalSpacing="10dp" 
    android:horizontalSpacing="10dp" 
    android:columnWidth="90dp" 
    android:stretchMode="columnWidth" 
    android:gravity="center" 
/> 

はまた、私のコードに使用されている画像クラスは次のとおりです:

package friends.appModules.mainClasses; 

import android.app.Application; 
import android.graphics.drawable.Drawable; 

public class Images extends Application{ 
    private Drawable imageUrl; 

    public Images(Drawable imageUrl) { 
     this.imageUrl = imageUrl; 
    } 
    public Drawable getImageUrl() { 
     return imageUrl; 
    } 
} 

おかげBaseAdapterとAsyncLoader

package friends.appModules.mainClasses; 
import java.io.IOException; 
import java.io.InputStream; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.List; 

import friends.appModules.commonClasses.Cheeses; 

import android.content.Context; 
import android.graphics.drawable.Drawable; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.LoaderManager; 
import android.support.v4.content.AsyncTaskLoader; 
import android.support.v4.content.Loader; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.BaseAdapter; 
import android.widget.GridView; 
import android.widget.ImageView; 
import android.widget.Toast; 

public class PeopleNearYou extends Fragment implements  LoaderManager.LoaderCallbacks<List<Images>>{ 

private GridView pnuGridView; 
ImageAdapter myImageAdapter; 
boolean isLoadFinished = false; 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    Log.d("Where am I?", "in onActivityCreated PeopleNearYou"); 

    getLoaderManager().initLoader(1, null, this); 
} 

/* First Method call after onActivityCreated*/ 
@Override 
public Loader<List<Images>> onCreateLoader(int id, Bundle args) { 
    Log.d("Where am I?", "in onCreateLoader PeopleNearYou"); 
    return new PeopleNearYouLoader(getActivity()); 
} 


@Override 
/*Fourth Method Called*/ 
public void onLoadFinished(Loader<List<Images>> loader, 
     List<Images> data) { 
    Log.d("Where am I?", "in onLoadFinished PeopleNearYou"); 

    final Context c = this.getActivity().getApplicationContext(); 
    myImageAdapter = new ImageAdapter(c); 

    myImageAdapter.setData(data); 

    pnuGridView.setAdapter(myImageAdapter); 
} 

@Override 
public void onLoaderReset(Loader<List<Images>> loader) { 
    Log.d("Where am I?", "in onLoaderReset PeopleNearYou"); 
    myImageAdapter.setData(null); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    Log.d("Where am I?", "in onCreateView PeopleNearYou"); 

    View view = inflater.inflate(R.layout.people_near_you, container, false); 

    pnuGridView = (GridView) view.findViewById(R.id.gridview); 
    //pnuGridView.setBackgroundColor(R.color.dark_gry_txt); 
    return view; 
} 



public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

public class ImageAdapter extends BaseAdapter{ 
    private Context mContext; 
    private List<Images> finallyListCreated; 

    public ImageAdapter(Context c) { 
     Log.d("Where am I?", "in ImageAdapter Constructor PeopleNearYou"); 
     mContext = c; 

     pnuGridView.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
       Toast.makeText(mContext, "" + position, Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 

    public int getCount() { 
     Log.d("Where am I?", "in getCount PeopleNearYou"); 
     return 20; 
    } 

    public Object getItem(int position) { 
     Log.d("Where am I?", "in getItem PeopleNearYou"); 
     return null; 
    } 

    public long getItemId(int position) { 
     Log.d("Where am I?", "in getItemId PeopleNearYou"); 
     return 0; 
    } 

    public void setData(List<Images> data) { 
     Log.d("Where am I ??", "in onSetData() PeopleNearYou"); 
     if (data != null) { 
      finallyListCreated = data; 
     } 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     Log.d("Where am I?", "in getView PeopleNearYou"); 
     ImageView imageView; 
     if (convertView == null) { // if it's not recycled, initialize some attributes 
      imageView = new ImageView(mContext); 
      imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      imageView.setPadding(8, 8, 8, 8); 
      imageView.setBackgroundColor(R.color.dark_gry_txt); 
     } else { 
      imageView = (ImageView) convertView; 
     } 

     Images item = finallyListCreated.get(position); 
     imageView.setImageDrawable(item.getImageUrl()); 
     return imageView; 
    } 
} 

public static class PeopleNearYouLoader extends AsyncTaskLoader<List<Images>>{ 

    Context loaderContext; 
    List<Images> loaderImageList; 

    public PeopleNearYouLoader(Context context) { 
     super(context); 
     Log.d("Where am I?", "in PeopleNearYouLoader Constructor PeopleNearYou"); 
     loaderContext = context; 
    } 

    @Override 
    /*Third method called if there are no images in the list else Deliver Result method will be called*/ 
    public List<Images> loadInBackground() 
    { 
     Log.d("Where am I ??", "in loadInBackground() PeopleNearYou"); 

     List<Images> peopleNearYouImagesList = new ArrayList<Images>(20); 

     for (int i=0; i<20; i++) { 
      Log.d("Where am I ??", "For loop to set Image objects PeopleNearYou"); 
      Images peopleNearYouImages = new Images(loadImageFromUrl(Cheeses.imageUrls[i])); 
      peopleNearYouImagesList.add(peopleNearYouImages); 
     } 

     return peopleNearYouImagesList; 
    } 

    @Override 
    public void onCanceled(List<Images> data) { 
     super.onCanceled(data); 
     onReleaseResources(data); 
    } 

    @Override 
    public void deliverResult(List<Images> images) { 
     if (isReset()) { 
      if (images != null) { 
       onReleaseResources(images); 
      } 
     } 

     List<Images> oldImages = images; 
     loaderImageList = images; 

     if (isStarted()) { 
      super.deliverResult(images); 
      Log.d("Where am I ??", "in isStarted = true PeopleNearYou"); 
     } 

     if (oldImages != null) { 
      onReleaseResources(oldImages); 
      Log.d("Where am I ??", "in oldImages != null PeopleNearYou"); 
     } 
    } 

    @Override 
    /* Second method called*/ 
    protected void onStartLoading() { 
     if (loaderImageList != null) { 
      deliverResult(loaderImageList); 
      Log.d("Where am I ??", "in onStartLoading() and list is not null"); 
     } 
     else { 
      Log.d("Where am I ??", "in onStartLoading() and list is null"); 
      forceLoad(); 
     } 
    } 

    @Override 
    protected void onStopLoading() { 
     cancelLoad(); 
     Log.d("Where am I ??", "in onStopLoading() PeopleNearYou"); 
    } 

    @Override 
    protected void onReset() { 
     super.onReset(); 

     onStopLoading(); 

     if (loaderImageList != null) { 
      onReleaseResources(loaderImageList); 
      loaderImageList = null; 
     } 
    } 

    protected void onReleaseResources(List<Images> data) { 
     Log.d("Where am I ??", "in onReleaseResources() PeopleNearYou"); 
    } 

    public Drawable loadImageFromUrl(String url) { 
     InputStream inputStream; 
     try { 
      inputStream = new URL(url).openStream(); 
     } catch (IOException e) { 
      throw new RuntimeException(e); 
     } 
     return Drawable.createFromStream(inputStream, "src"); 
    } 

} 
} 

が含まれていますし、私のGridViewのレイアウトがあり、その下のように私のフラグメントのクラスがありますあらかじめ。

答えて

0

ListFragment.setListShown()のソースコードを見てください。これは、GridViewで探しているものとまったく同じです。

関連する問題