0

我有一个具有可滚动选项卡视图的应用程序,其中每个选项卡都是一个片段。现在我希望每个选项卡都有一个自定义列表视图。但根据我提出的代码,在传递实例的片段中存在一个问题,因为它需要一个Activity的实例。 这是在适配器要求实例传递的第11行有错误的片段。在CustomListAdapter中传递实例时出现问题的Android片段

public class Department extends Fragment { 

     public Department(){} 

    private String TAG = Department.class.getSimpleName(); 
    private static final String url = "http://api.androidhive.info/json/movies.json"; 
    private List<Socs> socList = new ArrayList<>(); 
    private ListView listView; 
    private CustomListAdapter adapter; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.dept,container,false); 

     listView = (ListView) rootView.findViewById(R.id.lvDept); 
     adapter = new CustomListAdapter(Department.this,socList); 
     listView.setAdapter(adapter); 
     JsonArrayRequest socRequest = new JsonArrayRequest(url,new Response.Listener<JSONArray>() { 
      @Override 
      public void onResponse(JSONArray response) { 

       for (int i=0;i<response.length() ; i++){ 
        try { 
         JSONObject obj = response.getJSONObject(i); 
         Socs socs = new Socs(); 
         socs.setDesc(obj.getString("title")); 
         socs.setName(obj.getString("title")); 

         socList.add(socs); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
       adapter.notifyDataSetChanged(); 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       VolleyLog.d("ERROR" + error.getMessage()); 
      } 
     }); 
     AppController.getInstance().addToRequestQueue(socRequest); 

     return rootView; 


    } 

     } 

是Android的工作室是给该错误是

CustomListAdapter (Android.app.Activity, List<socs>) can not be applied to CustomListAdapter(com..Department, List<socs>) 

这里是适配器CustomList

public class CustomListAdapter extends BaseAdapter { 

    private Activity activity; 
    private LayoutInflater inflater; 
    private List<Socs> socItems; 

    public CustomListAdapter(Activity activity, List<Socs> socItems){ 
     this.activity = activity; 
     this.socItems = socItems; 
    } 

    @Override 
    public int getCount() { 
     return socItems.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return socItems.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 


     if (inflater==null) 
      inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if (convertView==null) 
      convertView = inflater.inflate(R.layout.list_row,null); 

     TextView nameL = (TextView) convertView.findViewById(R.id.socName); 
     TextView descL = (TextView) convertView.findViewById(R.id.socDesc); 

     Socs socs = socItems.get(position); 

     nameL.setText(socs.getName()); 
     descL.setText(socs.getDesc()); 

     return convertView; 
    } 
} 

而且滚动标签适配器

public class SectionsPagerAdapter extends FragmentStatePagerAdapter { 

    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     Fragment fragment = null; 
     switch (position){ 
      case 0: 
       fragment = new Department(); 
       break; 
      case 1: 
       fragment = new Technical(); 
       break; 
      case 2: 
       fragment = new Cultural(); 
       break; 
      case 3: 
       fragment = new StudentChapters(); 
     } 
     return fragment; 
    } 

    @Override 
    public int getCount() { 
     return 4; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     String title = new String(); 
     switch (position){ 
      case 0: 
       title="Department"; 
       break; 
      case 1: 
       title="Technical"; 
       break; 
      case 2: 
       title="Cultural"; 
       break; 
      case 3: 
       title="Student Chapters"; 
       break; 
      default: 
       title=null; 
       break; 
     } 
     return title; 
    } 
} 

我试图改变depa rtment到Activity,但随后可滚动的选项卡适配器会提供错误。我尝试在CustomListAdapter中使用getActivity(),但它在运行时给出了一个错误,因为我没有为片段分配任何值,因此我给出了片段的空馈送。只是为了检查,然后我给了一个临时值来分割,这样可以扩大默认视图。它仍然给出了一个空错误。

回答

1

错误来自于你调用CustomListAdapter();的事实,片段作为第一个参数,并且此对象的构造函数正在等待一个活动。相反,你可以这样做:

new CustomListAdapter(Department.this.getActivity(),socList); 

对于你的第二个问题,你可以更新你的问题,你得到的错误?

+0

问题现在已经解决,但我不明白你说的最后一行.. – 2015-02-10 23:33:00

+0

是不是一切都解决了,还是你需要第二个问题的帮助? – Quanturium 2015-02-10 23:34:35

+0

否解决。我现在明白错误并已将其删除。 – 2015-02-10 23:36:09