Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GridView没有';t加载第一个可见集的图像_Java_Android_Android Gridview - Fatal编程技术网

Java GridView没有';t加载第一个可见集的图像

Java GridView没有';t加载第一个可见集的图像,java,android,android-gridview,Java,Android,Android 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

我有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;
        }

    }

}

这可能是因为您没有在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;
}

你能发布你的活动代码吗?给你,用完整的代码编辑谢谢,CustomGridView类也会很有帮助。那里几乎什么都有。该类扩展了FrameLayout,并且只有我包含的构造函数。在这种情况下,您是否尝试过使用标准的GridView?这与在onCreateView中执行有什么不同,除非我没有layout inflater?
@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;
}