[英]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.