Gallery in a Fragment

瘦欲@ 提交于 2020-01-15 09:03:48

问题


I'm having a little bit of trouble on implementing a gallery into a Fragment. The gallery I'm trying to put in used to be an Activity but I want it to now be a Fragment since I'm now working on a different project to make my app look more cleaner. I'm getting an error at

gridView.setAdapter(new ImageAdapter(this));

and at

 Intent i = new Intent(getApplicationContext(), FullImageActivity.class);

I honestly have no idea on how to fix these any help would be awesome sauce

Also, I don't have much experience with Fragments and I'm quite new to it so any details that could help me understand what I'm doing wrong is welcomed!

Here's the Java code:

package info.androidhive.slidingmenu;

import android.app.Activity;
import android.app.Fragment;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;


public class GalleryActivity extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); }
    //setContentView(R.layout.gallery_layout);

    public View onCreateView(LayoutInflater inflater, ViewGroup parent, 
            Bundle saedInstanceState) {
        View rootView = inflater.inflate(R.layout.gallery_layout, parent, false);
    GridView gridView = (GridView) rootView.findViewById(R.id.photos);

    // Instance of ImageAdapter Class
    gridView.setAdapter(new ImageAdapter(this));
    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(getApplicationContext(), FullImageActivity.class);
            // passing array index
            i.putExtra("id", position);
            startActivity(i);
        }
    });
}
}

回答1:


Change this

 gridView.setAdapter(new ImageAdapter(this));

to

 gridView.setAdapter(new ImageAdapter(getActivity()));

this does not refer to Activity Context since your class extends Fragment. getActvity() returns the activity this fragment is associated with.

Also change

  Intent i = new Intent(getApplicationContext(), FullImageActivity.class);

to

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

Also you need to return rootView at the end of onCreateView

@Override // missing annotation
public View onCreateView(LayoutInflater inflater, ViewGroup parent, 
        Bundle saedInstanceState) {
    View rootView = inflater.inflate(R.layout.gallery_layout, parent, false);
     ...// rest of the code

     return rootView;
}

Or Override onActivityCreated and use getView to initialize gridview. just return view in onCreateView

 @Override // missing annotation
 public View onCreateView(LayoutInflater inflater, ViewGroup parent, 
        Bundle saedInstanceState) {
    View rootView = inflater.inflate(R.layout.gallery_layout, parent, false);

     return rootView;
 }

Then

@Override
public void onActivityCreated(Bundle savedInstanceState) {

 GridView gridView = (GridView) getView().findViewById(R.id.photos);

    // Instance of ImageAdapter Class
    gridView.setAdapter(new ImageAdapter(getActivity()));
    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(getActivity(), FullImageActivity.class);
            // passing array index
            i.putExtra("id", position);
            startActivity(i);
        }
    });
   }



回答2:


Try this below code

  @Override     
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {      
ViewGroup root = (ViewGroup) inflater.inflate(R.layout.gallery_layout, null);
            GridView gv1=(GridView)root.findViewById(R.id.gridview);
            gv1.setAdapter(new ImageAdapter(getActivity()));
     gridView.setAdapter(new ImageAdapter(this));
        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(getApplicationContext(), FullImageActivity.class);
                // passing array index
                i.putExtra("id", position);
                startActivity(i);
            }
        });
            return root;
        }



回答3:


      @Override// This must be in above in your fragment implementing class
   public View onCreateView(LayoutInflater inflater, ViewGroup parent, 
        Bundle saedInstanceState) {
 View rootView = inflater.inflate(R.layout.gallery_layout, parent, false);
GridView gridView = (GridView) rootView.findViewById(R.id.photos);

// Instance of ImageAdapter Class
gridView.setAdapter(new ImageAdapter(getActivity()));
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(getActivity(), FullImageActivity.class);
        // passing array index
        i.putExtra("id", position);
        startActivity(i);
       }
      } 
    );
    }
  return rootView;
 }

Remove this from your code :

    @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); }
   //setContentView(R.layout.gallery_layout);

This is also not a good approach you should put your fragment code after activity has been created.

Inside this method:

@Override
public void onActivityCreated(Bundle savedInstanceState) {


来源:https://stackoverflow.com/questions/20768766/gallery-in-a-fragment

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!