簡體   English   中英

錯誤:類型不兼容:HomeFragment無法轉換為上下文

[英]error: incompatible types: HomeFragment cannot be converted to Context

我在Adapter上遇到錯誤,這是我的代碼,錯誤指向此代碼,其錯誤位於HomeFragment.java ,其內容為:

錯誤:類型不兼容:HomeFragment無法轉換為上下文

adapter = new Adapter(models,this);

這是我的HomeFragment.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);
    }
}

然后這是我的Adapter.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可以轉換為ContextFragment則不能。

因此,您必須檢索getActivity()正在執行的當前Activity的實例。

如果您想在Activity創建Adapter實例,則可以通過簡單地傳遞this來做到這this ,就像我之前說過的那樣, Activity可以轉換為ContextFragment不是。 所以Activity將被強制轉換為Context ,但是當您想在Fragment創建Activity時,您不能簡單地傳遞this ,因此,它引發了錯誤。

正如您在評論中所說,現在還有另一個錯誤,這是因為您已經在該方法的第一行上return ed,因此,該行下的每一行都將無法到達,這就是為什么會出現該錯誤,將其放置在線

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM