错误:不兼容的类型:主页片段无法转换为上下文



我的Adapter上出现了错误,这是我的代码,错误指向此代码,它HomeFragment.java,它说:

错误:不兼容的类型:主页片段无法转换为上下文

adapter = new Adapter(models,this);

这是我的主页片段.java

public class HomeFragment extends Fragment {
    //cardview
    ViewPager viewPager;
    Adapter adapter;
    List<Model> models;
    Integer[]colors = null;
    ArgbEvaluator argbEvaluator = new ArgbEvaluator();

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_home,container,false);
        //cardview
        models = new ArrayList<>();
        models.add(new Model(R.drawable.brochure,"Brochure","Lorem ipsum dolor sit amet"));
        models.add(new Model(R.drawable.sticker,"Sticker","Lorem ipsum dolor sit amet"));
       models.add(new Model(R.drawable.poster,"Poster","Lorem ipsum dolor sit amet"));
       models.add(new Model(R.drawable.namecard,"Name Card","Lorem ipsum dolor sit amet"));
        adapter = new Adapter(models,this);
        viewPager = getView().findViewById(R.id.viewPager);
        viewPager.setAdapter(adapter);
        viewPager.setPadding(130,0,130,0);
    }
}

那么这是我的适配器.java

public class Adapter extends PagerAdapter {
    private List<Model> models;
    private LayoutInflater layoutInflater;
    private Context context;
    public Adapter(List<Model> models, Context context) {
        this.models = models;
        this.context = context;
    }
    @Override
    public int getCount() {
        return models.size();
    }
    @Override
    public boolean isViewFromObject(View view, @NonNull Object object) {
        return view.equals(object);
    }
    @NonNull
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        layoutInflater = LayoutInflater.from(context);
        View view = layoutInflater.inflate(R.layout.item,container,false);
        ImageView imageView;
        TextView title,desc;
        imageView = view.findViewById(R.id.image);
        title = view.findViewById(R.id.title);
        desc = view.findViewById(R.id.desc);
        imageView.setImageResource(models.get(position).getImage());
        title.setText(models.get(position).getTitle());
        desc.setText(models.get(position).getDesc());
        container.addView(view,0);
        return view;
    }
    @Override
    public void destroyItem(ViewGroup container, int position, @NonNull Object object) {
        container.removeView((View)object);
    }
}

更改以下内容:

adapter = new Adapter(models,this);

对此:

adapter = new Adapter(models, (Context) getActivity());

你必须通过Context.Activity可以投Context,但Fragment不能。

因此,您必须检索当前Activity的实例,我们正在通过getActivity()

.

如果你想在Activity中创建Adapter的实例,那么你可以通过简单的传递this来实现,就像我之前说的,Activity可以投射ContextFragment不能。所以Activity将被强制转换为Context,但是当您想在Fragment中创建相同的内容时,您不能简单地传递this,因此,它引发了错误。

正如您在评论中所说,现在又出现了另一个错误,那是因为您已经在该方法的第一行return了一些东西,因此,该方法下的每一行都将永远无法到达,这就是存在该错误的原因,请将此行放在该行

return inflater.inflate(R.layout.fragment_home,container,false);

最后,错误将消失。

在您的方法中进行更多编辑后,您的OnCreateView将如下所示:

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.fragment_home, container, false); // Created a instance of View which we can return later.
    //cardview
    models = new ArrayList<>();
    models.add(new Model(R.drawable.brochure,"Brochure","Lorem ipsum dolor sit amet"));
    models.add(new Model(R.drawable.sticker,"Sticker","Lorem ipsum dolor sit amet"));
    models.add(new Model(R.drawable.poster,"Poster","Lorem ipsum dolor sit amet"));
    models.add(new Model(R.drawable.namecard,"Name Card","Lorem ipsum dolor sit amet"));
    adapter = new Adapter(models,this);
    viewPager = view.findViewById(R.id.viewPager); // Change getView() to view here.
    viewPager.setAdapter(adapter);
    viewPager.setPadding(130,0,130,0);
    return view; // Returned the view.
}

代替this,使用getActivity()

更改此内容

adapter = new Adapter(models,this);

adapter = new Adapter(models,getActivity());

最新更新