2015-08-15 30 views
0

在我的应用程序中,我有PostersFragment这将是一个GridView与电影海报,在这个片段中,我需要初始化GridView和customGridViewAdapter。 我的customGridViewAdapter需要获取Bitmaps数组,然后使用它。 我调用AsyncTask的问题是在不同的类中,它从JSON获取所有信息并将信息与电影海报存储在本地数据库中。 我无法理解如何以及何时使用.setAdapter(gridViewCustomAdapter);如何从asyncTask设置GridViewCustomAdapter?

有我的代码。

public class PostersFragment extends Fragment implements AdapterView.OnItemClickListener { 


private GridView gv_posters; 
private GridViewCustomAdapter gridViewCustomAdapter; 

public PostersFragment() { 
    setHasOptionsMenu(true); 
} 

@Override 
public void onStart() { 
    super.onStart(); 
    UpdatePosters(); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
Log.d("TESTAG","onCreateView"); 
    View rootView = inflater.inflate(R.layout.fragment_main, container, false); 
    gv_posters = (GridView) rootView.findViewById(R.id.gv_posters); 
    gv_posters.setAdapter(gridViewCustomAdapter); 
    gv_posters.setOnScrollListener(new PostersScrollListener(getActivity().getApplicationContext())); 
    gv_posters.setOnItemClickListener(this); 
    // Define new adapter for grid view 
    return rootView; 
} 
private void UpdatePosters() { 
    Log.d("TESTAG","UpdatePoster"); 
    MoviesTask task = new MoviesTask(getActivity(),gridViewCustomAdapter); 
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); 
    String path = prefs.getString(getString(R.string.sort_method_posters_pref), getString(R.string.default_path)); 
    task.execute(path); 
} 

MoviesTask.java

public class MoviesTask extends AsyncTask<String, Void, Bitmap[]> { 

// Byte array to handle bitmaps 
private byte[] imgByte; 

// Context and custom adapter variables 
private final Context mContext; 
private GridViewCustomAdapter mGridCustomAdapter; 

// MovieTask Constructor 
public MoviesTask(Context context, GridViewCustomAdapter gridAdapter) { 
    mContext = context; 
    mGridCustomAdapter = gridAdapter; 

} 

Parsing JSON methods... 

    @Override 
protected void onPostExecute(Bitmap[] bitmaps){ 
    Log.d("TESTAG","onPostExecute"); 
    if (bitmaps != null) 
     mGridCustomAdapter = new GridViewCustomAdapter(mContext,R.id.single_gv_poster,bitmaps); 

} 

GridViewCustomAdapter.java

public class GridViewCustomAdapter extends BaseAdapter{ 

private Context context; 
int layoutResource; 
private Bitmap[] bitmaps; 

public GridViewCustomAdapter(Context context,int layoutResource, Bitmap[] bitmaps){ 
    this.context = context; 
    this.layoutResource = layoutResource; 
    this.bitmaps = bitmaps; 
} 

@Override 
public int getCount() { 
    return 0; 
} 

@Override 
public Object getItem(int position) { 
    return null; 
} 

@Override 
public long getItemId(int position) { 
    return 0; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View view = convertView; 
    viewHolder holder = null; 

    if (view == null){ 
     LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
     view = inflater.inflate(layoutResource,parent,false); 

     holder = new viewHolder(); 
     holder.imageView = (ImageView)view.findViewById(R.id.single_gv_poster); 
     view.setTag(holder); 
    }else 
     holder = (viewHolder)view.getTag(); 

    Bitmap bitmap = bitmaps[position]; 
    holder.imageView.setImageBitmap(bitmap); 
    return view; 
} 
static class viewHolder{ 
    ImageView imageView; 
} 
} 

任何人都可以帮助我解决这个问题吗?

回答

0

你可以这样说:从的onCreate)

删除线(

gv_posters.setAdapter(gridViewCustomAdapter);

PostExecute应该看起来像这样:

@Override 
protected void onPostExecute(Bitmap[] bitmaps){ 
    Log.d("TESTAG","onPostExecute"); 
    if (bitmaps != null) 
     mGridCustomAdapter = new GridViewCustomAdapter(mContext,R.id.single_gv_poster,bitmaps); 
     gv_posters.setAdapter(mGridCustomAdapter); 
    } 
} 

希望这会帮助你。

相关问题