Android 子片段';使用Support lib v4 rev20时未调用s onCreateView()
我对手机的看法如下:Android 子片段';使用Support lib v4 rev20时未调用s onCreateView(),android,android-fragments,android-support-library,Android,Android Fragments,Android Support Library,我对手机的看法如下: MainActivity包含PaymentsFragment,其中包含一个FragmentPagerAdapter,而后者又包含2个TransactionListFragments PaymentFragment示例代码: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRe
MainActivity
包含PaymentsFragment
,其中包含一个FragmentPagerAdapter
,而后者又包含2个TransactionListFragments
PaymentFragment
示例代码:
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setRetainInstance(true);
mPaymentsPagerAdapter = new PaymentsPagerAdapter(getActivity(), getChildFragmentManager(), this);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.fragment_payments, container, false);
assert view != null;
if (!isFirstRun)
mPaymentsPagerAdapter.setOnTransactionClickListener(this);
else
isFirstRun = false;
ViewPager viewPager = (ViewPager) view.findViewById(R.id.fragment_payments_viewpager);
viewPager.setAdapter(mPaymentsPagerAdapter);
PagerSlidingTabStrip pagerSlidingTabStrip = (PagerSlidingTabStrip) view.findViewById(R.id.fragment_payments_tabstrip);
pagerSlidingTabStrip.setViewPager(viewPager);
return view;
}
@Override
public Fragment getItem(int position)
{
switch (position)
{
case 0:
TransactionsListFragment recurringPaymentsListFragment = TransactionsListFragment.newRecurringPaymentsInstance();
recurringPaymentsListFragment.setOnTransactionClickListener(mPaymentsFragment);
return recurringPaymentsListFragment;
case 1:
TransactionsListFragment paymentsListFragment = TransactionsListFragment.newPaymentsInstance();
paymentsListFragment.setOnTransactionClickListener(mPaymentsFragment);
return paymentsListFragment;
}
return null;
}
PaymentsPagerAdapter
示例代码:
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setRetainInstance(true);
mPaymentsPagerAdapter = new PaymentsPagerAdapter(getActivity(), getChildFragmentManager(), this);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.fragment_payments, container, false);
assert view != null;
if (!isFirstRun)
mPaymentsPagerAdapter.setOnTransactionClickListener(this);
else
isFirstRun = false;
ViewPager viewPager = (ViewPager) view.findViewById(R.id.fragment_payments_viewpager);
viewPager.setAdapter(mPaymentsPagerAdapter);
PagerSlidingTabStrip pagerSlidingTabStrip = (PagerSlidingTabStrip) view.findViewById(R.id.fragment_payments_tabstrip);
pagerSlidingTabStrip.setViewPager(viewPager);
return view;
}
@Override
public Fragment getItem(int position)
{
switch (position)
{
case 0:
TransactionsListFragment recurringPaymentsListFragment = TransactionsListFragment.newRecurringPaymentsInstance();
recurringPaymentsListFragment.setOnTransactionClickListener(mPaymentsFragment);
return recurringPaymentsListFragment;
case 1:
TransactionsListFragment paymentsListFragment = TransactionsListFragment.newPaymentsInstance();
paymentsListFragment.setOnTransactionClickListener(mPaymentsFragment);
return paymentsListFragment;
}
return null;
}
在TransactionListFragment
内部,没有发生什么事情。此外,它的onCreate()和onCreateView()都没有被调用,所以我认为PaymentsFragment
或PaymentsPayGeradapter
中都有错误
问题是,在升级到支持v4 lib rev20之前,所有的代码都工作正常。我降级到rev19,它又开始工作了。那么,关于是什么导致rev 20失败的想法,或者是一个bug?另外,如果有的话,解决方法是什么?显然,支持库中的
setRetainInstance()
方法发生了一些变化,从v20开始,继续到v21,再加上Android 5.0
当我从父片段中删除setRetainInstance(true)
后,它就开始工作了