Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.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显示除少数图像外的所有图像_Java_Android_Gridview - Fatal编程技术网

Java Android:GridView显示除少数图像外的所有图像

Java Android:GridView显示除少数图像外的所有图像,java,android,gridview,Java,Android,Gridview,我下载了6张图片,但我的图库中的GridView只显示其中的5张 我正在尝试复制Instagram如何显示其多媒体资料,其中选定的图像占据了屏幕的60%,而多媒体资料图像占据了其余部分 fragment_gallery.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:l

我下载了6张图片,但我的图库中的GridView只显示其中的5张

我正在尝试复制Instagram如何显示其多媒体资料,其中选定的图像占据了屏幕的60%,而多媒体资料图像占据了其余部分

fragment_gallery.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/relLayoutl">
        <!--toolbar-->
        <include layout="@layout/snippet_top_gallerybar"/>

    </RelativeLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:weightSum="100"
        android:layout_below="@+id/relLayoutl">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="60">

            <ImageView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:id="@+id/galleryImageView"
                android:scaleType="centerCrop"/>

            <ProgressBar
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:id="@+id/progressBar"
                android:layout_centerInParent="true"/>
        </RelativeLayout>

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="40">
        <GridView
            android:layout_width="match_parent"
            android:layout_height="fill_parent"
            android:numColumns="5"
            android:verticalSpacing="1.5dp"
            android:horizontalSpacing="1.5dp"
            android:gravity="center"
            android:layout_marginTop="1dp"
            android:stretchMode="none"
            android:id="@+id/gridView">

        </GridView>
        </RelativeLayout>
    </LinearLayout>
</RelativeLayout>

我创建了一个方形视图来生成方形单元

layout_grid_imageview.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <com.example.sheldon.instagramclone.Util.SquareImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/gridViewImage"
        android:adjustViewBounds="true"
        android:scaleType="centerCrop"/>

    <ProgressBar
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_centerInParent="true"
        android:id="@+id/gridProgressBar"/>
</RelativeLayout>

GalleryFragment.java

public class GalleryFragment extends Fragment {

private static final int NUM_COLUMNS = 4;
private ImageView mExit;
private Spinner mSpinner;
private TextView mNext;
private ProgressBar mProgressBar;
private List<String> directories;
private GridView mGridView;
private ImageView mGalleryImage;
private HashMap<String, ArrayList<String>> directoryToImage;
private String append = "file:/";
private String mSelectedImage;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_gallery, container, false);
    mExit = (ImageView) view.findViewById(R.id.exitShare);
    mSpinner = (Spinner) view.findViewById(R.id.shareSpinner);
    mNext = (TextView) view.findViewById(R.id.shareNext);
    mProgressBar = (ProgressBar) view.findViewById(R.id.progressBar);
    mGridView = (GridView) view.findViewById(R.id.gridView);
    mGalleryImage = (ImageView) view.findViewById(R.id.galleryImageView);
    mExit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            getActivity().finish();
        }
    });

    mNext.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d(TAG, "onClick: Navigating to next step in sharing photo");
            Intent intent = new Intent(getActivity(), NextActivity.class);
            intent.putExtra("selected_image", mSelectedImage);
            startActivity(intent);
        }
    });
    init();

    return view;
}

private void init() {
    ImageFinder imageFinder = new ImageFinder();
    imageFinder.getImages(getActivity());
    directoryToImage = imageFinder.getImageMapping();
    directories = new ArrayList<>(directoryToImage.keySet());
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), R.layout.spinner_item, directories);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        mSpinner.setAdapter(adapter);
        mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            Log.d(TAG, "onItemSelected: " + directories.get(position));
            setUpGridView(directories.get(position));
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });
}

private void setUpGridView(String directory) {
    final ArrayList<String> imgURLS = directoryToImage.get(directory);
    Log.d(TAG, "setUpGridView: Displaying " + directory + "  with " + imgURLS.size() + " images");
    int gridWidth = getResources().getDisplayMetrics().widthPixels;
    int imageWidth = gridWidth / NUM_COLUMNS;
    Log.d(TAG, "setUpGridView: Image Width is " + imageWidth);
    mGridView.setColumnWidth(imageWidth);
    GridImageAdapter adapter = new GridImageAdapter(getActivity(), R.layout.layout_grid_imageview, append, imgURLS);
    mGridView.setAdapter(adapter);
    UniversalImageLoader.setImage(imgURLS.get(0),mGalleryImage, mProgressBar, append);
    mSelectedImage = imgURLS.get(0);
    mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        UniversalImageLoader.setImage(imgURLS.get(position), mGalleryImage, mProgressBar, append);
        mSelectedImage = imgURLS.get(0);
    }
});}
公共类GalleryFragment扩展了片段{
私有静态final int NUM_COLUMNS=4;
私有ImageView mExit;
私人纺纱机;
私有文本视图mNext;
私人ProgressBar mProgressBar;
私有列表目录;
私有网格视图mGridView;
私有图像查看mGalleryImage;
私有HashMapDirectoryToImage;
私有字符串append=“file:/”;
私有字符串mSelectedImage;
@可空
@凌驾
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment_gallery,container,false);
mExit=(ImageView)view.findViewById(R.id.exitShare);
mSpinner=(微调器)view.findViewById(R.id.shareSpinner);
mNext=(TextView)view.findViewById(R.id.shareNext);
mProgressBar=(ProgressBar)view.findViewById(R.id.ProgressBar);
mGridView=(GridView)view.findviewbyd(R.id.GridView);
mGalleryImage=(ImageView)view.findViewById(R.id.galleryImageView);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
getActivity().finish();
}
});
mNext.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Log.d(标记“onClick:导航到共享照片的下一步”);
Intent Intent=新的Intent(getActivity(),nextractivity.class);
intent.putExtra(“所选图像”,mSelectedImage);
星触觉(意向);
}
});
init();
返回视图;
}
私有void init(){
ImageFinder ImageFinder=新的ImageFinder();
getImages(getActivity());
directoryToImage=imageFinder.getImageMapping();
directories=newarraylist(directoryToImage.keySet());
ArrayAdapter=新的ArrayAdapter(getActivity(),R.layout.spinner_项,目录);
setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
mSpinner.setAdapter(适配器);
mSpinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
Log.d(标记“onItemSelected:”+目录.get(位置));
setUpGridView(directories.get(position));
}
@凌驾
未选择公共无效(AdapterView父级){
}
});
}
私有void setUpGridView(字符串目录){
final ArrayList imgURLS=directoryToImage.get(directory);
Log.d(标记,“setUpGridView:显示“+目录+”和“+imgURLS.size()+”图像”);
int gridWidth=getResources().getDisplayMetrics().widthPixels;
int imageWidth=gridWidth/NUM_列;
Log.d(标记“setUpGridView:图像宽度为”+imageWidth);
mGridView.setColumnWidth(imageWidth);
GridImageAdapter=新的GridImageAdapter(getActivity(),R.layout.layout\u grid\u imageview,append,imgURLS);
mGridView.setAdapter(适配器);
设置图像(imgURLS.get(0)、mGalleryImage、mProgressBar、append);
mSelectedImage=imgURLS.get(0);
mGridView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
设置图像(imgURLS.get(位置)、mGalleryImage、mProgressBar、append);
mSelectedImage=imgURLS.get(0);
}
});}
我使用一个名为Universal Image loader的库来显示图像

GridImageAdapter.java

public class GridImageAdapter extends ArrayAdapter<String>{

private Context mContext;
private LayoutInflater mInflater;
private int layoutResource;
private String mAppend;
private ArrayList<String> imgURLs;

public GridImageAdapter(Context context, int layoutResource, String append, ArrayList<String> imgURLs) {
    super(context, layoutResource, imgURLs);
    mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    mContext = context;
    this.layoutResource = layoutResource;
    mAppend = append;
    this.imgURLs = imgURLs;
}

private static class ViewHolder{
    SquareImageView image;
    ProgressBar mProgressBar;
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {

    final ViewHolder holder;
    if(convertView == null){
        convertView = mInflater.inflate(layoutResource, parent, false);
        holder = new ViewHolder();
        holder.mProgressBar = (ProgressBar) convertView.findViewById(R.id.gridProgressBar);
        holder.image = (SquareImageView) convertView.findViewById(R.id.gridViewImage);

        convertView.setTag(holder);
    }
    else{
        holder = (ViewHolder) convertView.getTag();
    }

    String imgURL = getItem(position);
    Log.d(TAG, "getView: Loading position " + position + ", displaying " + imgURL + ", with image " + holder.image);

    ImageLoader imageLoader = ImageLoader.getInstance();

    imageLoader.displayImage(mAppend + imgURL, holder.image, new ImageLoadingListener() {
        @Override
        public void onLoadingStarted(String imageUri, View view) {
            if(holder.mProgressBar != null){
                holder.mProgressBar.setVisibility(View.VISIBLE);
            }
        }

        @Override
        public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
            if(holder.mProgressBar != null){
                holder.mProgressBar.setVisibility(View.GONE);
            }
        }

        @Override
        public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
            if(holder.mProgressBar != null){
                holder.mProgressBar.setVisibility(View.GONE);
            }
        }

        @Override
        public void onLoadingCancelled(String imageUri, View view) {
            if(holder.mProgressBar != null){
                holder.mProgressBar.setVisibility(View.GONE);
            }
        }
    });

    return convertView;
}
公共类GridImageAdapter扩展了ArrayAdapter{
私有上下文;
私人停车场;
私人内部布局资源;
私有字符串mAppend;
私人ArrayList imgURLs;
公共GridImageAdapter(上下文上下文、int-layoutResource、字符串附加、ArrayList imgURLs){
super(上下文、布局资源、imgURLs);
mInflater=(LayoutInflater)context.getSystemService(context.LAYOUT\u充气机\u服务);
mContext=上下文;
this.layoutResource=layoutResource;
mAppend=append;
this.imgURLs=imgURLs;
}
私有静态类视图持有者{
方视图图像;
ProgressBar-mProgressBar;
}
@非空
@凌驾
公共视图getView(int位置,@Nullable视图convertView,@NonNull视图组父级){
最终持票人;
if(convertView==null){
convertView=mInflater.inflate(布局资源,父项,false);
holder=新的ViewHolder();
holder.mProgressBar=(ProgressBar)convertView.findViewById(R.id.gridProgressBar);
holder.image=(SquareImageView)convertView.findViewById(R.id.gridViewImage);
convertView.setTag(支架);
}
否则{
holder=(ViewHolder)convertView.getTag();
}
字符串imgURL=getItem(位置);
Log.d(标记“getView:加载位置”+位置+”,显示“+imgURL+”,带有图像“+holder.image”);
ImageLoader ImageLoader=ImageLoader.getInstance();
displayImage(mAppend+imgURL,holder.image,new ImageLoadingListener()){
@凌驾
public void onLoadingStarted(字符串imageUri,视图){
if(holder.mProgressBar!=null){
支架.mProgressBar.setVisibility(视图.可见);
}
}
@凌驾
public void onload失败(字符串imageUri,视图