2014-03-07 37 views
0

的圖片我有GridView和我加載根據項目位置不同的看法:GridView控件不加載第一組可見

@Override 
public View getView(int _i, View _view, ViewGroup viewGroup){ 
    BlockMod _b = (BlockMod)getItem(_i); 
    if(_b.getType().equals(BlockMod.BLOCK_TYPE_NOTE)) 
     _view = new BlockViewNote(getActivity(),gridView.getColumnWidth(), _b); 
    if(_b.getType().equals(BlockMod.BLOCK_TYPE_IMAGE)) 
     _view = new BlockViewImage(getActivity(),gridView.getColumnWidth(), _b); 
    if(_b.getType().equals(BlockMod.BLOCK_TYPE_STATUS)) 
     _view = new BlockViewStatus(getActivity(),gridView.getColumnWidth()); 
    return _view; 
} 

裏面的這些觀點我加載一些遠程圖像:

public BlockViewImage(Context context, int _columnWidth, BlockMod _block){ 
    super(context); 
    block = _block; 
    rootView = View.inflate(context, R.layout.story_block_image,this); 
    AbsListView.LayoutParams _lp = new AbsListView.LayoutParams(_columnWidth,_columnWidth); 
    this.setLayoutParams(_lp); 
    ImageSize targetSize = new ImageSize(_columnWidth, _columnWidth); 
    final ImageView _background = (ImageView)rootView.findViewById(R.id.storyBlockImageBackground); 
    DisplayImageOptions _imageOptions = new DisplayImageOptions.Builder().cacheInMemory(true).cacheOnDisc(true).build(); 
    ImageLoader.getInstance().loadImage(block.getImageSmall(), targetSize, _imageOptions , new SimpleImageLoadingListener(){ 
     @Override 
     public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage){ 
      _background.setImageBitmap(loadedImage); 
     } 
    }); 
} 

問題是它不會加載任何初始視圖的圖像,如果向下滾動它將加載下一個視圖的所有圖像。如果我向後滾動,它會爲之前的圖像加載圖像。但是,如果沒有滾動,它永遠不會加載它。

如果我使用不同的庫圖像,然後它工作得很好:

Picasso.with(context) 
       .load(block.getImageSmall()) 
       .into(_background); 

代碼全片段類:

package net.eq.pck.fragments.main.story; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import net.eq.pck.*; 
import net.eq.pck.compoundViews.CustomGridView; 
import net.eq.pck.fragments.main.story.blocks.*; 
import net.eq.pck.model.block.BlockMod; 
import net.eq.pck.model.stories.StoryMod; 
import net.eq.pck.server.Scheduler; 

import java.util.HashMap; 

/** 
* Created by usr on 1/21/14. 
*/ 
public class StoryFragment2 extends Fragment{ 

    private StoryMod story; 

    private View rootView; 
    private CustomGridView gridView; 
    private CustomAdapter gridAdapter; 

    public void setStory(StoryMod _story){ 
     story = _story; 
    } 

    public interface StoryFragmentInterface{ 
     void onBack(); 
    } 

    public StoryFragment2(){ 

    } 

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

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
     rootView = inflater.inflate(R.layout.story_fragment, container, false); 
     Scheduler.getInstance().scheduleStoryUpdate(story); 
     gridView = getViewGrid(); 
     gridAdapter = new CustomAdapter(); 
     return rootView; 
    } 



    @Override 
    public void onResume(){ 
     super.onResume(); 
     gridView.setAdapter(gridAdapter); 
    } 

    private CustomGridView getViewGrid(){ 
     return (CustomGridView) rootView.findViewById(R.id.storyFragmentGridView); 
    } 

    private class CustomAdapter extends BaseAdapter{ 
     private HashMap<Integer,View> customCash = new HashMap<Integer, View>(); 

     @Override 
     public int getCount(){ 
      return story.getBlocks().length; 
     } 

     @Override 
     public Object getItem(int position){ 
      return story.getBlocks()[position]; 
     } 

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


     @Override 
     public View getView(int _i, View _view, ViewGroup viewGroup){ 
      BlockMod _b = (BlockMod)getItem(_i); 

      if(customCash.containsKey(_i)) 
       return customCash.get(_i); 

      if(_b.getType().equals(BlockMod.BLOCK_TYPE_NOTE)) 
       _view = new BlockViewNote(getActivity(),gridView.getColumnWidth(), _b); 
      if(_b.getType().equals(BlockMod.BLOCK_TYPE_IMAGE)) 
       _view = new BlockViewImage(getActivity(),gridView.getColumnWidth(), _b); 
      if(_b.getType().equals(BlockMod.BLOCK_TYPE_STATUS)) 
       _view = new BlockViewStatus(getActivity(),gridView.getColumnWidth()); 

      customCash.put(_i,_view); 
      return _view; 
     } 

    } 

} 

CustomGridView:

public class CustomGridView extends GridView{ 
    public CustomGridView(Context context){ 
     super(context); 
    } 

    public CustomGridView(Context context, AttributeSet attrs){ 
     super(context, attrs); 
    } 

    public CustomGridView(Context context, AttributeSet attrs, int defStyle){ 
     super(context, attrs, defStyle); 
    } 



    @SuppressLint("NewApi") 
    @Override 
    public int getColumnWidth(){ 
     if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) return super.getColumnWidth(); 
     else{ 
      try{ 
       Field field = GridView.class.getDeclaredField("mColumnWidth"); 
       field.setAccessible(true); 
       Integer value = (Integer) field.get(this); 
       field.setAccessible(false); 
       return value.intValue(); 
      }catch(NoSuchFieldException e){ 
       throw new RuntimeException(e); 
      }catch(IllegalAccessException e){ 
       throw new RuntimeException(e); 
      } 
     } 
    } 

} 
+0

請問您可以發佈您的活動代碼嗎? – tpbapp

+0

在這裏,使用完整的代碼編輯 – somerandomusername

+0

謝謝,CustomGridView類也會有所幫助 – tpbapp

回答

0

難道這是因爲你沒有在onCreateView中設置適配器?

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
    rootView = inflater.inflate(R.layout.story_fragment, container, false); 
    Scheduler.getInstance().scheduleStoryUpdate(story); 
    gridView = getViewGrid(); 
    gridAdapter = new CustomAdapter(); 
    gridView.setAdapter(gridAdapter); 
    return rootView; 
} 
+0

這與在onCreateView中做的不同,除非我沒有佈局充氣器? – somerandomusername