Android GridView(自定义)片段图片,但是打不开页面

Android GridView(customized) fragement picture ,but cant open the page

我想在 Fragement 中制作自定义 GridView, 使用 URLHTTP 获取 url 并使用 Bitmap.

但我只完成了一半,

我无法打开 MapFragement 页面并且找不到我的 bug 很久没解决问题,求大神指教

请帮助或尝试提供一些实现方法,

谢谢!

我的代码:

item_gridview_member.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" >

        <ImageView
            android:id="@+id/imgmember"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            />
    </RelativeLayout>

fragement_member.xml

       <?xml version="1.0" encoding="utf-8"?>
        <LinearLayout
            android:orientation="vertical"  xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            tools:context=".MemberFragment">
          <GridView
              android:id="@+id/gridmember"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:columnWidth="150dp"
              android:stretchMode="columnWidth"
              android:numColumns="3"
              android:verticalSpacing="3dp"
              android:layout_marginBottom="3dp">
          </GridView>

CImage.java

    import android.graphics.Bitmap;

    public class CImage {

            private String imagePath;
            private Bitmap bitmap;

        public CImage(String imagePath, Bitmap bitmap) {
            this.imagePath = imagePath;
            this.bitmap = bitmap;
        }

        public String getImagePath() {
                return imagePath;
            }
            public void setImagePath(String imagePath) {
                this.imagePath = imagePath;
            }
            public Bitmap getBitmap() {
                return bitmap;
            }
            public void setBitmap(Bitmap bitmap) {
                this.bitmap = bitmap;
            }

    }

GridViewAdapter.java

    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;  
    import com.example.yao.pm.R;  
    import java.util.List;   
    public class GridViewAdapter  extends BaseAdapter {

        private LayoutInflater myInflater;

        private List<CImage> ImgList;

        public GridViewAdapter(Context context,List<CImage> ImgList) {
            myInflater = LayoutInflater.from(context);
            this.ImgList = ImgList;
        }


        @Override
        public int getCount() {
            return ImgList.size();
        }

        @Override
        public Object getItem(int position) {
            return ImgList.get(position);
        }

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

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

            ViewHolder holder = null;


            if(convertView == null)
            {
                convertView = myInflater.inflate(R.layout.item_gridview_member,null);
                holder = new ViewHolder();
                holder.imageView = convertView.findViewById(R.id.image_meme);
                convertView.setTag(holder);
            }

            CImage image = ImgList.get(position);

            holder.imageView.setImageBitmap(image.getBitmap());

            if (image.getBitmap() == null) {
                holder.imageView.setImageResource(R.mipmap.ic_launcher);
            } else {
                holder.imageView.setImageBitmap(image.getBitmap());
            }

            return convertView;
        }

        public class ViewHolder {
            ImageView imageView;
        }

    }

MapFregement.java

    public class MemberFragment extends Fragment {


        private GridViewAdapter adapter;

        private ArrayList<CImage> imageList;

        public MemberFragment() {
            // Required empty public constructor
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            return inflater.inflate(R.layout.fragment_member, container, false);

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

            inital();
            adapter = new GridViewAdapter(getActivity(),imageList);
            grieview.setAdapter(adapter);

        }

        public void inital(){

            grieview = getActivity().findViewById(R.id.gridmember);

        }
        GridView grieview;
    }

谢谢!!

查看代码后,我认为问题出在 MemberFragmentclass.

中的 GridView

您正在使用 inflater 将视图膨胀到片段中,并尝试使用 activity 上下文解析 id。此外,您需要在 Fragment.

中覆盖 onViewCreated()

What is usage of onViewCreated()?

Called immediately after onCreateView(LayoutInflater, ViewGroup, Bundle) has returned, but before any saved state has been restored in to the view. This gives subclasses a chance to initialize themselves once they know their view hierarchy has been completely created. The fragment's view hierarchy is not however attached to its parent at this point.


你的MemberFragment.java:

public class MemberFragment extends Fragment {

    private GridView grieview;
    private GridViewAdapter adapter;
    private ArrayList<CImage> imageList;

    public MemberFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_member, container, false);

    }

    //Note: Change is from here, Instead of onActivityCreated(), override this method. Use View object from it.
    @Override
    void onViewCreated (View view, Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        inital(view); // Get the View Object provided from method parameter to find your fragment layout view IDs, It's the same View you return in onCreateView method.
        adapter = new GridViewAdapter(getActivity(),imageList);
        grieview.setAdapter(adapter);
    }

    public void inital(View view){
        grieview = view.findViewById(R.id.gridmember); //Find your view inside fragment like this.
    }

}

希望对您有所帮助!