2017-02-18 72 views
0

之间刷卡不响应我有抽屉式的布局,有四个片段片段FragmentViewPager而片段

它的一个片段被称为债务人。债务人有FragmentViewPager应该返回FragmentDebtorsForMe或FragmentDebtorsMeT​​oOther。

我创建Debtors.class CategoryAdapterDebtors(债务人延伸片段)

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    ViewPager viewPager = (ViewPager) view.findViewById(R.id.debtors_viewpager); 
    TabLayout tabLayout = (TabLayout) view.findViewById(R.id.debtors_tabs); 

    CategoryAdapterDebtors categoryAdapterDebtors = new CategoryAdapterDebtors 
      (getChildFragmentManager()); 
    viewPager.setAdapter(categoryAdapterDebtors); 
    tabLayout.setupWithViewPager(viewPager); 

} 

CategoryAdapterDebtors的方式,扩展FragmentPagerAdapter:

public class CategoryAdapterDebtors extends FragmentPagerAdapter { 


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

@Override 
public Fragment getItem(int position) { 
    if(position==0) 
     return new FragmentDebtorsForMe(); 
    if(position==1) 
     return new FragmentDebtorsMeToOther(); 

    return null; 

} 

@Override 
public CharSequence getPageTitle(int position) { 
    if (position == 0) { 
     return "For me"; 
    } else if (position == 1) { 
     return "Me to other"; 
    } 
    return null; 
} 

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

我会贴上两个碎片的一个应该出现在ViewPager因为他们都有同样的问题,而且在开始阶段,他们有相同的内容。

public class FragmentDebtorsForMe extends Fragment{ 

private static final String TAG = FragmentDebtorsForMe.class.getSimpleName(); 

DatabaseClients dbClients; 
List<Client> listOfClients; 

public FragmentDebtorsForMe() { 
    Log.i(TAG, "FragmentDebtorsForMe: START"); 
    // Required empty public constructor 
} 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    Log.i(TAG, "onCreate: start"); 
    super.onCreate(savedInstanceState); 

    listOfClients = getAllClientsFromDatabase(); 


    Log.i(TAG, "onCreate: end"); 
} 


@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    Log.i(TAG, "onCreateView: START"); 
    View rootView = inflater.inflate(R.layout.recycler, container, false); 
    Log.i(TAG, "onCreateView: END"); 
    return rootView; 

} 
@Override 
public void onAttach(Context context) { 
    Toast.makeText(context, "halo", Toast.LENGTH_SHORT).show(); 

    Log.i(TAG, "onAttach: START"); 
    super.onAttach(context); 
} 

@Override 
public void onDetach() { 
    Log.i(TAG, "onDetach: START"); 
    super.onDetach(); 
} 

public List<Client> getAllClientsFromDatabase() { 
    dbClients = new DatabaseClients(getContext()); 
    List<Client> clients = dbClients.getAllClient(); 

    for(Client c: clients) 
     Log.i(TAG, "getAllClientsFromDatabase: " + c.toString()); 

    return clients; 
} 

}

问题是,当我在片段之间滑动我的任何Log.i的不响应。

其他奇怪的事情是,当我在我的导航抽屉里点击债务人,然后从FragmentDebtorsForMe和FragmentDebtorsMeT​​oOther调用日志,但只有一次,而不是在ViewPager之间滑动时。

当我创建例如用于FragmentDebtorsMeT​​oOther随机视图显示它是正常显示(onCreateView工作),但Log.i仍然无法正常工作

我不知道什么可能导致此问题。

回答

0

这两个片段都是在同一时间创建的,这就是为什么你一次看到所有的日志。这是因为默认情况下,ViewPager预加载下一页和上一页。您看到的放缓是由于您在onCreate()的主线程上访问数据库而不是在后台线程上进行的。主线程绝不能被阻塞,因为它负责响应UI事件。