2017-09-18 88 views
0

我现在有一个项目,我需要使用2个片段。在我的mainActivity里面,我调用两个片段的两个方法来初始化它们的适配器。我现在面临的问题是,当我调用第二个片段的方法时,我得到一个类别转换异常,说我的片段1不能转换为片段2.类转换异常:片段1不能转换为片段2

我输入了正确的库import android.support.v4.app.Fragment所以我不知道为什么我得到错误。

这是我的活动的一部分,其中我定义了片段:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     //toolbar = (Toolbar) findViewById(R.id.toolbar); 
     //setSupportActionBar(toolbar); 

     token = SharedPrefsHelper.getString(getApplicationContext(), Constants.TOKEN); 

     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     viewPager = (ViewPager) findViewById(R.id.viewpager); 
     setupViewPager(viewPager); 

     tabLayout = (TabLayout) findViewById(R.id.tabs); 
     tabLayout.setupWithViewPager(viewPager); 

     SendNetworkRequest(0); 
     SendNetworkRequest(1); 
    } 

    private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     adapter.addFragment(new InternsFragment(), "Internos"); 
     adapter.addFragment(new ExternsFragment(), "Externos"); 
     viewPager.setAdapter(adapter); 
    } 

    class ViewPagerAdapter extends FragmentPagerAdapter { 
     private final List<Fragment> mFragmentList = new ArrayList<>(); 
     private final List<String> mFragmentTitleList = new ArrayList<>(); 

     public ViewPagerAdapter(FragmentManager manager) { 
      super(manager); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return mFragmentList.get(position); 
     } 

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

     public void addFragment(Fragment fragment, String title) { 
      mFragmentList.add(fragment); 
      mFragmentTitleList.add(title); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return mFragmentTitleList.get(position); 
     } 
    } 

这是当我请从第一片段的方法我的活动内:

if (listUsers != null && !listUsers.isEmpty()) { 
          ExternsFragment fragment = (ExternsFragment) getSupportFragmentManager().findFragmentById(R.id.viewpager); 
          fragment.initAdapter(listUsers); 
         } 

这是当我从我的活动中的第二个片段调用方法:

if (!response.body().isEmpty()) { 
         listTeams = response.body(); 

         InternsFragment fragment = (InternsFragment) getSupportFragmentManager().findFragmentById(R.id.viewpager); 
         fragment.initAdapter(); 

         for (int j = 0; j < listTeams.size(); j ++) { 
          System.out.println(listTeams.get(j).getName()); 
         } 
        } 

这是c第一个片段颂歌:

public class ExternsFragment extends Fragment { 

    //@BindView(R.id.recycler_view) RecyclerView recyclerView; 
    private TeamAdapter teamAdapter; 
    private RecyclerView recyclerView; 

    public ExternsFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View rootView = inflater.inflate(R.layout.fragment_externs, container, false); 
     recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view); 
     recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 

     return rootView; 
    } 

    public void initAdapter(List<UserProject> userList) { 

     teamAdapter = new TeamAdapter(getActivity(), userList); 

     recyclerView.setAdapter(teamAdapter); 

    } 
} 

这是第二:

public class InternsFragment extends Fragment{ 

    private RecyclerView recyclerView; 
    List<ListItem> consolidatedList = new ArrayList<>(); 
    private GroupAdapter adapter; 

    public InternsFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View rootView = inflater.inflate(R.layout.fragment_interns, container, false); 
     recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view); 
     recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 

     return rootView; 
    } 

    private HashMap<String, List<UserProject>> groupDataIntoHashMap(List<UserProject> listOfPojosOfJsonArray) { 

     HashMap<String, List<UserProject>> groupedHashMap = new HashMap<>(); 

     for (UserProject pojoOfJsonArray : listOfPojosOfJsonArray) { 

      String hashMapKey = pojoOfJsonArray.getTeamId(); 

      if (groupedHashMap.containsKey(hashMapKey)) { 
       // The key is already in the HashMap; add the pojo object 
       // against the existing key. 
       groupedHashMap.get(hashMapKey).add(pojoOfJsonArray); 
      } else { 
       // The key is not there in the HashMap; create a new key-value pair 
       List<UserProject> list = new ArrayList<>(); 
       list.add(pojoOfJsonArray); 
       groupedHashMap.put(hashMapKey, list); 
      } 
     } 


     return groupedHashMap; 
    } 

    public void initAdapter() { 
     HashMap<String, List<UserProject>> groupedHashMap = groupDataIntoHashMap(ActivityTeams.listUsers); 


     for (String date : groupedHashMap.keySet()) { 
      TeamItem dateItem = new TeamItem(); 
      dateItem.setTeam(date); 
      consolidatedList.add(dateItem); 


      for (UserProject pojoOfJsonArray : groupedHashMap.get(date)) { 
       GeneralItem generalItem = new GeneralItem(); 
       generalItem.setPojoOfJsonArray(pojoOfJsonArray);//setBookingDataTabs(bookingDataTabs); 
       consolidatedList.add(generalItem); 
      } 
     } 


     adapter = new GroupAdapter(getActivity(), consolidatedList); 
     LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity()); 
     layoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
     recyclerView.setLayoutManager(layoutManager); 
     recyclerView.setAdapter(adapter); 
    } 

} 
+0

您可以显示您从片段中调用方法的详细代码吗?@Marcos Guimaraes – KeLiuyue

+0

您正尝试将'R.id.viewpager'转换为'ExternsFragment'和'InternsFragment',其中一个演员将抛出异常。 – Oleg

+0

感谢您的回复。所以我这样做是因为我只想在我从我的活动中得到结果后,片段就初始化它们的适配器。有没有更好的方法来做到这一点? –

回答

0

让你的片段为您的活动类变量。

InternsFragment mInternsFragment; 
ExternsFragment mExternsFragment; 

//inside oncreate 
mInternsFragment = new InternsFragment(); 
mExternsFragment = new ExternsFragment(); 

adapter.addFragment(mInternsFragment, "Internos");  
adapter.addFragment(mExternsFragment, "Externos"); 

然后直接从活动中的任何地方使用它们。