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);
}
}
}
}
請問您可以發佈您的活動代碼嗎? – tpbapp
在這裏,使用完整的代碼編輯 – somerandomusername
謝謝,CustomGridView類也會有所幫助 – tpbapp