获得在适配器正确的上下文和片段

问题描述:

我得到一个错误在我的适配器获得在适配器正确的上下文和片段

错误:(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> 
+0

在CustomListAdapter你的第一个参数是一个片段,它应该是语境,你应该传递来自MainFragment类的Activity的上下文作为getActivity() –

适配器需要Activitycontext。您可以使用片段的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,而不是活动。

+0

好吧,让我看看我可以如何编写片段和附加的活动。忍耐与我我没有经历过片段 – Zidane

+0

@Zidane如何将片段附加到活动或什么?我不明白questiion -.- – DEADMC

+0

感谢您的帮助我最终不需要附加到一个活动 – Zidane

可以使用

viewGroup.getContext()

在onCreateViewHolder

,或者

viewHolder.getView().getContext()

在onBindViewHolder

+0

没有人有一个教程链接,我可以看到如何设置 – Zidane

+0

第二个是合乎逻辑的,因为它是一个视图你可以得到每个视图的上下文。 –

+0

第一个是viewgroup(扩展视图),所以它和第二个方法一样 –