Java ImageAdapter无法应用于片段类

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

我遵循了关于如何使用GridView的文档,遇到了与这家伙相同的问题

我的片段类中的代码如下

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”,但它现在起作用了,非常感谢您知道这有帮助!