2016-11-16 62 views
-1

我得到一個錯誤在我的適配器獲得在適配器正確的上下文和片段

錯誤:(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() –

回答

0

適配器需要Activitycontext。您可以使用片段的getActivity()方法來訪問Activity上下文。請注意,您需要確保fragment已附加到Activity

因此,要解決這個替換以下

CustomListAdapter adapter=new CustomListAdapter(this, itemname, imgid); 

CustomListAdapter adapter=new CustomListAdapter(getActivity(), itemname, imgid); 
0

變化

CustomListAdapter adapter=new CustomListAdapter(this, itemname, imgid); 

CustomListAdapter adapter=new CustomListAdapter(getActivity(), itemname, imgid); 

因爲在你的情況下this是鏈接到MainFragment,而不是活動。

+0

好吧,讓我看看我可以如何編寫片段和附加的活動。忍耐與我我沒有經歷過片段 – Zidane

+0

@Zidane如何將片段附加到活動或什麼?我不明白questiion -.- – DEADMC

+0

感謝您的幫助我最終不需要附加到一個活動 – Zidane

0

可以使用

viewGroup.getContext()

在onCreateViewHolder

,或者

viewHolder.getView().getContext()

在onBindViewHolder

+0

沒有人有一個教程鏈接,我可以看到如何設置 – Zidane

+0

第二個是合乎邏輯的,因爲它是一個視圖你可以得到每個視圖的上下文。 –

+0

第一個是viewgroup(擴展視圖),所以它和第二個方法一樣 –