Grid View inside Fragment

0

Well I'm doing an application where I want to put a gridview in a fragment the problem is in a line of code that marks me error This is the code:

import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;

public class AccionFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.fragment_accion, container, false);

    GridView gridView = (GridView)getActivity().findViewById(R.id.gridview);
    gridView.setAdapter(new ImageAdapter(this));

    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Toast.makeText(AccionFragment.this, "" + position, Toast.LENGTH_SHORT).show();
        }
    });

    return view;
}

public class ImageAdapter extends BaseAdapter {
    private Context mconxtext;

    public ImageAdapter (Context c) {
        mconxtext = c;
    }

    public ImageAdapter(AccionFragment accionFragment) {
    }

    public int getCount() {
        return mThumbsIds.length;
    }

    public Object getItem (int position) {
        return null;
    }

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

    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView = new ImageView(mconxtext);
        imageView.setLayoutParams(new GridView.LayoutParams(240,426));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(5,5,5,5);
        imageView.setImageResource(mThumbsIds[position]);
        return imageView;
    }

        private Integer[] mThumbsIds = {
                R.drawable.spiderman,
                R.drawable.blade_runner_2049,
                R.drawable.guardianes_de_la_galaxia_vol2,
                R.drawable.john_wick,
                R.drawable.jumanji,
                R.drawable.liga_de_la_justicia,
                R.drawable.mujer_maravilla,
                R.drawable.rapidos_y_furiosos,
                R.drawable.thor_ragnakor
        };
}

}

Where I'm marking error is here:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.fragment_accion, container, false);

    GridView gridView = (GridView)getActivity().findViewById(R.id.gridview);
    gridView.setAdapter(new ImageAdapter(this));

    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Toast.makeText(AccionFragment.this, "" + position, Toast.LENGTH_SHORT).show();
        }
    });

    return view;
}

What should I do?

    
asked by Javier David 25.02.2018 в 21:01
source

1 answer

0

The problem is that you are linking the view of GridVeiw by calling the findViewById() method of the activity to which the fragment belongs.

GridView gridView = (GridView)getActivity().findViewById(R.id.gridview);

To link the view of GridView you must use the view object that stores the layout view.

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

This way your code would be like this.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                     Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_accion, container, false);

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

    // ...

    return view;
}

Update

At Toast you have to pass the context of the activity, which you get with the getActivity() method.

Toast.makeText(getActivity(), "" + position, Toast.LENGTH_SHORT).show();
    
answered by 26.02.2018 в 14:03