Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.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 Android使用GridView和OnScrollListener加载10幅图像_Java_Android_Gridview - Fatal编程技术网

Java Android使用GridView和OnScrollListener加载10幅图像

Java Android使用GridView和OnScrollListener加载10幅图像,java,android,gridview,Java,Android,Gridview,我正在构建一个gridview,其中包含大量的图像,大概有1000多张。为了减少gridview的加载时间,我想加载10个图像 tnx GalleryActivity.java public class GalleryActivity extends AppCompatActivity { private GridView gridView; private GridViewAdapter gridAdapter; ArrayList<String>

我正在构建一个gridview,其中包含大量的图像,大概有1000多张。为了减少gridview的加载时间,我想加载10个图像 tnx

GalleryActivity.java

    public class GalleryActivity extends AppCompatActivity {
    private GridView gridView;
    private GridViewAdapter gridAdapter;
    ArrayList<String> f = new ArrayList<String>();// list of file paths
    File[] listFile;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gallery);

        gridView = (GridView) findViewById(R.id.gridView);
        gridAdapter = new GridViewAdapter(this, R.layout.grid_item_layout, getData());
        gridView.setAdapter(gridAdapter);
        //gridView.setOnScrollChangeListener(new EndlessScrollListener());

        gridView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                ImageItem item = (ImageItem) parent.getItemAtPosition(position);

                //Create intent
                Intent intent = new Intent(GalleryActivity.this, DetailsActivity.class);
                intent.putExtra("title", R.string.text_by + item.getTitle());
                intent.putExtra("subtitle", R.string.text_by + item.getSubtitle());
                intent.putExtra("image", item.getAddress());

                //Start details activity
                startActivity(intent);
            }
        });

        gridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(GalleryActivity.this, "333 " + position,
                        Toast.LENGTH_SHORT).show();
                return false;
            }
        });
    }
    private ArrayList<ImageItem> getData() {
        final ArrayList<ImageItem> imageItems = new ArrayList<>();
        getFromSdcard();
        for (int i = 0; i < f.size(); i++) {
            Bitmap bitmap = createThumbnailFromBitmap(f.get(i), 200, 200);
            Bitmap bitmapIcon = createThumbnailFromBitmap(f.get(i), 50, 50);
            imageItems.add(new ImageItem(bitmap,bitmapIcon,f.get(i),f.get(i),f.get(i)));
        }
        return imageItems;
    }
    public void getFromSdcard()
    {
        File file= new File(Environment.getExternalStorageDirectory(),"DCIM/Camera");
        if (file.isDirectory())
        {
            listFile = file.listFiles();

            for (int i = 0; i < listFile.length ; i++)
            {
                f.add(listFile[i].getAbsolutePath());
            }
        }
    }
    private Bitmap createThumbnailFromBitmap(Bitmap source, int width, int height){
        //OPTIONS_RECYCLE_INPUT- Constant used to indicate we should recycle the input
        return ThumbnailUtils.extractThumbnail(source, width, height, ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
    }
    private Bitmap createThumbnailFromBitmap(String filePath, int width, int height){
        return ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(filePath), width, height);
    }
}
java

public class GridViewAdapter extends ArrayAdapter<ImageItem> {

    private Context context;
    private int layoutResourceId;
    private ArrayList<ImageItem> data = new ArrayList<ImageItem>();

    public GridViewAdapter(Context context, int layoutResourceId, ArrayList<ImageItem> data) {
        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        ViewHolder holder;

        if (row == null) {
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);
            holder = new ViewHolder();
            holder.imageTitle = (TextView) row.findViewById(R.id.text_date_card_mochgir);
            holder.subtitle = (TextView) row.findViewById(R.id.secondary_by_card_mochgir);
            holder.image = (ImageView) row.findViewById(R.id.image_card_mochgir);
            holder.icon = (ImageView) row.findViewById(R.id.icon_app_mochgir);
            row.setTag(holder);
        } else {
            holder = (ViewHolder) row.getTag();
        }

        ImageItem item = data.get(position);
        holder.imageTitle.setText(getContext().getResources().getString(R.string.text_date) + item.getTitle());
        holder.subtitle.setText(getContext().getResources().getString(R.string.text_by) + item.getSubtitle());
        holder.image.setImageBitmap(item.getImage());
        holder.icon.setImageBitmap(item.getIcon());

        return row;
    }

    static class ViewHolder {
        TextView imageTitle;
        TextView subtitle;
        ImageView image;
        ImageView icon;
    }
}
公共类GridViewAdapter扩展了ArrayAdapter{
私人语境;
私人内部布局资源;
private ArrayList data=new ArrayList();
公共GridViewAdapter(上下文上下文、int-layoutResourceId、ArrayList数据){
超级(上下文、布局资源ID、数据);
this.layoutResourceId=layoutResourceId;
this.context=上下文;
这个数据=数据;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=转换视图;
视窗座;
if(行==null){
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
行=充气机。充气(layoutResourceId,父级,false);
holder=新的ViewHolder();
holder.imageTitle=(TextView)row.findViewById(R.id.text\u date\u card\u mochgir);
holder.subtitle=(TextView)row.findViewById(R.id.secondary\u by\u card\u mochgir);
holder.image=(ImageView)row.findViewById(R.id.image\u card\u mochgir);
holder.icon=(ImageView)row.findViewById(R.id.icon\u app\u mochgir);
row.setTag(支架);
}否则{
holder=(ViewHolder)row.getTag();
}
ImageItem=data.get(位置);
holder.imageTitle.setText(getContext().getResources().getString(R.string.text_date)+item.getTitle());
holder.subtitle.setText(getContext().getResources().getString(R.string.text_by)+item.getSubtitle());
holder.image.setImageBitmap(item.getImage());
holder.icon.setImageBitmap(item.getIcon());
返回行;
}
静态类视窗夹{
文本视图图像标题;
文本视图字幕;
图像视图图像;
图像视图图标;
}
}


我建议您改用RecyclerView,您不必担心加载时间,因为RecyclerView会销毁不在视图中的项目,只加载视图中的项目,使其快速高效

要设置RecycerView,请签出此帖子:
希望这有帮助,

我只能看到代码。你的问题是什么?欢迎来到StackOverflow。请访问上的“帮助”页面,并修改您的问题,以包含一个最小的可验证完整示例,并提供一些解释。
public class GridViewAdapter extends ArrayAdapter<ImageItem> {

    private Context context;
    private int layoutResourceId;
    private ArrayList<ImageItem> data = new ArrayList<ImageItem>();

    public GridViewAdapter(Context context, int layoutResourceId, ArrayList<ImageItem> data) {
        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        ViewHolder holder;

        if (row == null) {
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);
            holder = new ViewHolder();
            holder.imageTitle = (TextView) row.findViewById(R.id.text_date_card_mochgir);
            holder.subtitle = (TextView) row.findViewById(R.id.secondary_by_card_mochgir);
            holder.image = (ImageView) row.findViewById(R.id.image_card_mochgir);
            holder.icon = (ImageView) row.findViewById(R.id.icon_app_mochgir);
            row.setTag(holder);
        } else {
            holder = (ViewHolder) row.getTag();
        }

        ImageItem item = data.get(position);
        holder.imageTitle.setText(getContext().getResources().getString(R.string.text_date) + item.getTitle());
        holder.subtitle.setText(getContext().getResources().getString(R.string.text_by) + item.getSubtitle());
        holder.image.setImageBitmap(item.getImage());
        holder.icon.setImageBitmap(item.getIcon());

        return row;
    }

    static class ViewHolder {
        TextView imageTitle;
        TextView subtitle;
        ImageView image;
        ImageView icon;
    }
}
<GridView
    android:id="@+id/gridView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnWidth="200dp"
    android:numColumns="auto_fit"
    android:verticalSpacing="4dp"
    android:horizontalSpacing="4dp"
    android:paddingBottom="4dp"
    android:paddingLeft="4dp"
    android:paddingRight="4dp"
    android:paddingTop="4dp"
    android:stretchMode="columnWidth"
    android:gravity="center"
    android:focusable="true"
    android:clickable="true"
    android:contextClickable="true"
    android:drawSelectorOnTop="true"
    android:longClickable="true"/>