我的Adapter
代码上出现错误,这是我的代码,错误指向此代码,其on 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
。并且a Activity
可以强制转换为Context
a ,但Fragment
不是。
因此,您必须检索current的实例Activity
,而我们正在执行该实例getActivity()
。
如果你想创建的实例Adapter
中Activity
,那么你就可以做到这一点通过简单的传球this
,就像我之前说的,一个Activity
是铸造能够Context
但Fragment
不是。因此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.
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句