Java ImageAdapter无法应用于片段类
我遵循了关于如何使用GridView的文档,遇到了与这家伙相同的问题 我的片段类中的代码如下Java ImageAdapter无法应用于片段类,java,android,Java,Android,我遵循了关于如何使用GridView的文档,遇到了与这家伙相同的问题 我的片段类中的代码如下 public class SecondFragment extends Fragment { View myView; GridView gridview; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, B
public class SecondFragment extends Fragment {
View myView;
GridView gridview;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
myView = inflater.inflate(R.layout.second_layout, container, false);
gridview = (GridView) myView.findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(getActivity()));
return myView;
}
}
但是,我在倒数第二行“Image Adapter无法应用于android.app.activity”中遇到一个错误
我的ImageAdapter如下所示
public class ImageAdapter extends BaseAdapter {
private Context mcontext;
@Override
public int getCount() {
return mthumbids.length;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mcontext);
imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
}
else {
imageView = (ImageView)convertView;
}
return imageView;
}
private Integer[] mthumbids =
{
R.drawable.img1, R.drawable.img2,
R.drawable.img3, R.drawable.img4,
R.drawable.img5, R.drawable.img6
};
}
在ImageAdapter类中添加此代码
public ImageAdapter (Context context) {
super();
mContext = context;
}
您还可以在
getView()
中从父级获取上下文。这样就不必传递和存储上下文。因此,您的getView
如下所示:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
Context context = parent.getContext(); // <-- add this line
imageView = new ImageView(context); // use the context from the parent
imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
}
else {
imageView = (ImageView)convertView;
}
return imageView;
}
@覆盖
公共视图getView(int位置、视图转换视图、视图组父视图){
图像视图图像视图;
if(convertView==null){
Context Context=parent.getContext();//缺少具有ImageAdapter参数上下文的构造函数。
只会自动创建空构造函数
您应该使用特定的参数值编写构造函数
public ImageAdapter(Context context){
mContext=上下文;
}您需要在ImageAdapter
类中有一个构造函数,它将上下文作为参数
您还必须根据适配器的位置设置图像的背景
下面是修改后的适配器类
public class ImageAdapter extends BaseAdapter {
private Context mcontext;
public ImageAdapter (Context context) {
mContext = context;
}
@Override
public int getCount() {
return mthumbids.length;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mcontext);
imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
// Add the following to load the image
imageView.setBackground(ContextCompat.getDrawable(context, mthumbids[position]));
}
else {
imageView = (ImageView)convertView;
}
return imageView;
}
private Integer[] mthumbids =
{
R.drawable.img1, R.drawable.img2,
R.drawable.img3, R.drawable.img4,
R.drawable.img5, R.drawable.img6
};
}
谢谢,你的代码删除了错误,但是当我在模拟器中运行应用程序时,我的第二个片段显示为空白,并且没有显示构造函数上的网格viewadd super();谢谢,但是添加了你建议的代码行后,我会出现另一个错误;视图中的setBackground无法应用于java.lang.integerHad以将“context”更改为“mContext”,但它现在起作用了,非常感谢您知道这有帮助!