2017-02-18 108 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事件。