简体   繁体   English

片段中的画廊

[英]Gallery in a Fragment

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! 另外,我对Fragments没有多少经验,我对它很新,所以欢迎任何可以帮助我理解我做错的细节!

Here's the Java code: 这是Java代码:

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

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. 由于您的类扩展了Fragment,因此this不会引用Activity Context。 getActvity() returns the activity this fragment is associated with. getActvity()返回与此片段关联的活动。

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 您还需要在onCreateView的末尾返回rootView

@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. 或者覆盖onActivityCreated并使用getView初始化gridview。 just return view in onCreateView 只需在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);
        }
    });
   }

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;
        }
      @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) {

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM