Android 在片段之间滑动时,FragmentViewPager中的片段不响应

Android 在片段之间滑动时,FragmentViewPager中的片段不响应,android,android-fragments,Android,Android Fragments,我的抽屉布局有四个碎片 其中一个是被称为债务人的片段。债务人有FragmentViewPager,它应该返回FragmentDebtorForme或FragmentDebtorMetother 在Debtors.class(Debtors扩展片段)中创建CategoryAdapterDebtors的方法 扩展FragmentPagerAdapter的CategoryAdapter债务人: public class CategoryAdapterDebtors extends FragmentPa

我的抽屉布局有四个碎片

其中一个是被称为债务人的片段。债务人有FragmentViewPager,它应该返回FragmentDebtorForme或FragmentDebtorMetother

在Debtors.class(Debtors扩展片段)中创建CategoryAdapterDebtors的方法

扩展FragmentPagerAdapter的CategoryAdapter债务人:

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;
}
公共类FragmentDebtorForme扩展了片段{
private static final String TAG=fragmentdebortorsforme.class.getSimpleName();
数据库客户端;
客户名单;
公共分部债务人表格(){
Log.i(标签“FragmentDebtorForme:START”);
//必需的空公共构造函数
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
Log.i(标记“onCreate:start”);
super.onCreate(savedInstanceState);
ListofClient=getAllClientsFromDatabase();
Log.i(标记“onCreate:end”);
}
@可空
@凌驾
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
Log.i(标记“onCreateView:START”);
视图根视图=充气机。充气(R.layout.recycler,container,false);
Log.i(标记“onCreateView:END”);
返回rootView;
}
@凌驾
公共void-onAttach(上下文){
Toast.makeText(上下文,“光环”,Toast.LENGTH_SHORT).show();
Log.i(标签“onAttach:START”);
super.onAttach(上下文);
}
@凌驾
公共无效连接(){
Log.i(标记“onDetach:START”);
super.onDetach();
}
公共列表getAllClientsFromDatabase(){
dbClients=newdatabaseclients(getContext());
List clients=dbClients.getAllClient();
用于(客户c:客户)
i(标记“getAllClientsFromDatabase:+c.toString()”);
返回客户;
}
}

问题是,当我在日志的任何片段之间滑动时,我都不会响应

其他奇怪的事情是,当我在导航抽屉上单击“债务人”时,会从FragmentDebtorForme和FragmentDebtorsMetother调用日志,但在ViewPager之间滑动时只调用一次,不再调用

当我为FragmentDebtorMetother创建随机视图时,它会正确地显示视图(onCreateView工作),但会记录。我仍然不工作


我不知道是什么导致了这个问题

这两个片段是同时创建的,这就是为什么您可以同时看到所有日志。这是因为默认情况下,ViewPager会预加载下一页和上一页。您看到的速度减慢是由于您在onCreate()的主线程上访问数据库,而不是在后台线程上访问数据库。决不能阻止主线程,因为它负责响应UI事件

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;
}