Android GridView (настроенный) фреймворк, но не могу открыть страницу - PullRequest
0 голосов
/ 27 сентября 2018

Я хочу сделать персонализированный GridView в Fragement , используя URLHTTP , чтобы получить URL и использовать Bitmap.

Но ятолько на полпути,

Я не могу открыть страницу MapFragement и не могу найти свою ошибку. Я не могу решить проблему в течение длительного времени, пожалуйста, помогите мне.

Пожалуйста, помогите или попытайтесь дать некоторые идеи, как этого добиться,

спасибо!

Мой код:

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

Спасибо !!

1 Ответ

0 голосов
/ 27 сентября 2018

Изучив код, я думаю, что проблема была с вашим GridView в MemberFragment классе.

Вы надуваете просмотр фрагмента с помощью inflater и пытаетесь разрешить id с помощьюконтекст деятельности.Кроме того, вам нужно переопределить onViewCreated() во фрагменте.

Что такое использование onViewCreated()?

Вызывается сразу послеonCreateView(LayoutInflater, ViewGroup, Bundle) был возвращен, но до восстановления любого сохраненного состояния в представлении.Это дает подклассам возможность инициализировать себя, как только они узнают, что их иерархия представления полностью создана.Однако на этом этапе иерархия представления фрагмента не привязана к его родительскому элементу.


Your 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.
    }

}

Я надеюсь, что этопомогает!

...