![](/img/trans.png)
[英]error: incompatible types: HomeFragment cannot be converted to Fragment
[英]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
可以轉換為Context
而Fragment
則不能。
因此,您必須檢索getActivity()
正在執行的當前Activity
的實例。
如果您想在Activity
創建Adapter
實例,則可以通過簡單地傳遞this
來做到這this
,就像我之前說過的那樣, Activity
可以轉換為Context
而Fragment
不是。 所以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.