Sereen Shalby
Sereen Shalby

Reputation: 225

why i can't import my grid view with custom adapter into a fragment?

what i am trying to do is to view a grid view with custom adapter into fragment because i want to use a view pager with a swipe filter .. and here is my code :

 public class KitchenBlinds extends Fragment {
        public Integer[] mThumbIds = {
                R.drawable.kit_1, R.drawable.kit_2,
                R.drawable.kit_3, R.drawable.kit_4,
                R.drawable.kit_5, R.drawable.kit_6,
                R.drawable.kit_7, R.drawable.kit_8,
                R.drawable.kit_9, R.drawable.kit_10,
                R.drawable.kit_11, R.drawable.kit_12,
                R.drawable.kit_13, R.drawable.kit_14,
                R.drawable.kit_15
        };
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {

            View view = inflater.inflate(R.layout.activity_kitchen_blinds, container, false);

            return view;




        GridView gridview = (GridView)view.findViewById(R.id.grid_view);
          try{
            // Instance of ImageAdapter Class
                gridview.setAdapter(new ImageAdapter(getActivity(), mThumbIds)); 
          } catch (OutOfMemoryError E) { 
            E.printStackTrace();
        }


            /**
             * On Click event for Single Gridview Item
             * */
            gridview.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View v,
                        int position, long id) {

                    // Sending image id to FullScreenActivity
                    Intent i = new Intent(KitchenBlinds.this, FullImageActivity2.class);
                    // passing array index
                     i.putExtra("id", mThumbIds[position]);
                        Log.d("ID", "" + mThumbIds[position]);
                         startActivity(i);
                }
            });
        }




        }

but i keep see an error in this line :

 GridView gridview = (GridView)view.findViewById(R.id.grid_view);

and also in this one :

  Intent i = new Intent(KitchenBlinds.this, FullImageActivity2.class);

can you help me to use a grid view into fragment please???

and this is my kitchen_blinds_layout code :

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/grid_view"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:numColumns="auto_fit"
    android:columnWidth="90dp"
    android:horizontalSpacing="10dp"
    android:verticalSpacing="10dp"
    android:gravity="center"
    android:stretchMode="columnWidth" >  

</GridView>

Upvotes: 0

Views: 548

Answers (4)

Blackbelt
Blackbelt

Reputation: 157487

The first parameter of

 Intent i = new Intent(KitchenBlinds.this, FullImageActivity2.class);

is a Context, but KitchenBlinds is a Fragment. You shoud change it with getActivity()

 Intent i = new Intent(getActivity(), FullImageActivity2.class);

Also, you are returning too earlier. The return statements should be the last line of code inside your onCreateView otherwise you will get a compile time error.

Move return view at the end of onCreateView

Upvotes: 1

Nagaraja
Nagaraja

Reputation: 581

Major error is return view . Do like this

public class KitchenBlinds extends Fragment {
            public Integer[] mThumbIds = {
                    R.drawable.kit_1, R.drawable.kit_2,
                    R.drawable.kit_3, R.drawable.kit_4,
                    R.drawable.kit_5, R.drawable.kit_6,
                    R.drawable.kit_7, R.drawable.kit_8,
                    R.drawable.kit_9, R.drawable.kit_10,
                    R.drawable.kit_11, R.drawable.kit_12,
                    R.drawable.kit_13, R.drawable.kit_14,
                    R.drawable.kit_15
            };
            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                    Bundle savedInstanceState) {

                View view = inflater.inflate(R.layout.activity_kitchen_blinds, container, false);

                GridView gridview = (GridView)view.findViewById(R.id.grid_view);
              try{
                // Instance of ImageAdapter Class
                    gridview.setAdapter(new ImageAdapter(getActivity(), mThumbIds)); 
              } catch (OutOfMemoryError E) { 
                E.printStackTrace();
            }


                /**
                 * On Click event for Single Gridview Item
                 * */
                gridview.setOnItemClickListener(new OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View v,
                            int position, long id) {

                        // Sending image id to FullScreenActivity
                        Intent i = new Intent(KitchenBlinds.this, FullImageActivity2.class);
                        // passing array index
                         i.putExtra("id", mThumbIds[position]);
                            Log.d("ID", "" + mThumbIds[position]);
                             startActivity(i);
                    }
                });
            }

      return view;


            }

Upvotes: 2

InnocentKiller
InnocentKiller

Reputation: 5234

The first error you are getting is because you have not imported your grid-view in your project so first import it by pressing Ctrl + Shift + o (in eclipse).

The second error that you have in below line

Intent i = new Intent(KitchenBlinds.this, FullImageActivity2.class);

is wrong. Since you are using fragment you have to use it like this.

gridview.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View v,
                        int position, long id) {

                    // Sending image id to FullScreenActivity
                        Intent myIntent = new Intent((MainActivity) getActivity(),FullImageActivity2.class);
                    // passing array index
                     myIntent .putExtra("id", mThumbIds[position]);
                        Log.d("ID", "" + mThumbIds[position]);
                         getActivity().startActivity(myIntent);
                }
            });

and also you forget to return your view.

so basically your full code will loo something like this.

public class KitchenBlinds extends Fragment {
        public Integer[] mThumbIds = {
                R.drawable.kit_1, R.drawable.kit_2,
                R.drawable.kit_3, R.drawable.kit_4,
                R.drawable.kit_5, R.drawable.kit_6,
                R.drawable.kit_7, R.drawable.kit_8,
                R.drawable.kit_9, R.drawable.kit_10,
                R.drawable.kit_11, R.drawable.kit_12,
                R.drawable.kit_13, R.drawable.kit_14,
                R.drawable.kit_15
        };
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {

            View view = inflater.inflate(R.layout.activity_kitchen_blinds, container, false);

        GridView gridview = (GridView)view.findViewById(R.id.grid_view);
          try{
            // Instance of ImageAdapter Class
                gridview.setAdapter(new ImageAdapter(getActivity(), mThumbIds)); 
          } catch (OutOfMemoryError E) { 
            E.printStackTrace();
        }


            /**
             * On Click event for Single Gridview Item
             * */
             gridview.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View v,
                        int position, long id) {

                    // Sending image id to FullScreenActivity
                        Intent myIntent = new Intent((MainActivity) getActivity(),FullImageActivity2.class);
                    // passing array index
                     myIntent .putExtra("id", mThumbIds[position]);
                        Log.d("ID", "" + mThumbIds[position]);
                         getActivity().startActivity(myIntent);
                }
            });
               return view;
        }
        }

Upvotes: 1

vipul mittal
vipul mittal

Reputation: 17401

write return view; in the end of the onCreateView function

also change

Intent i = new Intent(KitchenBlinds.this, FullImageActivity2.class);

to

Intent i = new Intent(getActivity(), FullImageActivity2.class);

onCreateView:

 @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {

       View view = inflater.inflate(R.layout.activity_kitchen_blinds, container, false);

        GridView gridview = (GridView)view.findViewById(R.id.grid_view);
          try{
            // Instance of ImageAdapter Class
                gridview.setAdapter(new ImageAdapter(getActivity(), mThumbIds)); 
          } catch (OutOfMemoryError E) { 
            E.printStackTrace();
        }

            /**
             * On Click event for Single Gridview Item
             * */
            gridview.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View v,
                        int position, long id) {

                    // Sending image id to FullScreenActivity
                    Intent i = new Intent(KitchenBlinds.this, FullImageActivity2.class);
                    // passing array index
                     i.putExtra("id", mThumbIds[position]);
                        Log.d("ID", "" + mThumbIds[position]);
                         startActivity(i);
                }
            });

            return view;//return here

        }

Upvotes: 0

Related Questions