获得在适配器正确的上下文和片段
我得到一个错误在我的适配器获得在适配器正确的上下文和片段
错误:(26,20)错误:不兼容的类型:MainFragment不能转换到活动
我怀疑其原因方面,我想使用的类型是活动的,而不是片段
适配器
public class CustomListAdapter extends ArrayAdapter<String> {
private final Activity context;
private final String[] itemname;
private final Integer[] imgid;
public CustomListAdapter(MainFragment context, String[] itemname, Integer[] imgid) {
super(context, R.layout.mylist, itemname);
// TODO Auto-generated constructor stub
this.context=context;
this.itemname=itemname;
this.imgid=imgid;
}
public View getView(int position,View view,ViewGroup parent) {
LayoutInflater inflater=context.getLayoutInflater();
View rowView=inflater.inflate(R.layout.mylist, null,true);
TextView txtTitle = (TextView) rowView.findViewById(R.id.item);
ImageView imageView = (ImageView) rowView.findViewById(R.id.icons);
TextView extratxt = (TextView) rowView.findViewById(R.id.textView1);
txtTitle.setText(itemname[position]);
imageView.setImageResource(imgid[position]);
extratxt.setText("Description "+itemname[position]);
return rowView;
};
}
片段
public class MainFragment extends Fragment {
ListView list;
String[] itemname ={
"Safari",
"Camera",
"Global"
/*"FireFox",
"UC Browser",
"Android Folder",
"VLC Player",
"Cold War"*/
};
Integer[] imgid={
R.drawable.watersensoricon,
R.drawable.ic_shutoff,
R.drawable.ic_camera,
};
public MainFragment()
{
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Bundle bundle = this.getArguments();
//Integer data = EventBus.getDefault().removeStickyEvent(Integer.class);
//if (data != null)
//{
// classificationGroupFilter = data.intValue();
//}
// DashboardActivity activity = (DashboardActivity) getActivity();
// int call = activity.openCallLogs();
View view = inflater.inflate(R.layout.icons_main, container, false);
//load(view);
setupList(view);
return view;
}
// @Override
private void setupList(View view){
//super.onCreate(savedInstanceState);
//setContentView(R.layout.icons_main);
CustomListAdapter adapter=new CustomListAdapter(this, itemname, imgid);
list=(ListView)view.findViewById(R.id.list);
//(ListView)view.findViewById(R.id.lv_listview);
list.setAdapter(adapter);
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
String Slecteditem= itemname[+position];
//Toast.makeText(getApplicationContext(), Slecteditem, Toast.LENGTH_SHORT).show();
}
});
}
}
布局对于XML
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context ="com.xera.deviceinsight.home.MainFragment">
<!-- tools:context="{relativePackage}.${activityClass}" >-->
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" >
</ListView>
</RelativeLayout>
适配器需要Activity
的context
。您可以使用片段的getActivity()
方法来访问Activity
上下文。请注意,您需要确保fragment
已附加到Activity
。
因此,要解决这个替换以下
CustomListAdapter adapter=new CustomListAdapter(this, itemname, imgid);
与
CustomListAdapter adapter=new CustomListAdapter(getActivity(), itemname, imgid);
变化
CustomListAdapter adapter=new CustomListAdapter(this, itemname, imgid);
要
CustomListAdapter adapter=new CustomListAdapter(getActivity(), itemname, imgid);
因为在你的情况下this
是链接到MainFragment
,而不是活动。
可以使用
viewGroup.getContext()
,或者
viewHolder.getView().getContext()
在onBindViewHolder
没有人有一个教程链接,我可以看到如何设置 – Zidane
第二个是合乎逻辑的,因为它是一个视图你可以得到每个视图的上下文。 –
第一个是viewgroup(扩展视图),所以它和第二个方法一样 –
在CustomListAdapter你的第一个参数是一个片段,它应该是语境,你应该传递来自MainFragment类的Activity的上下文作为getActivity() –