Nat*_*tiv 8 android fragment android-fragments android-fragmentactivity
我遇到一个奇怪的问题:getActivity()方法总是在片段内返回null.我在onAttach()和onCreateView()完成运行后调用它.
这个片段存在于包含片段堆栈的FragmentActivity()中,我向其添加片段的方式是:
(此代码是从Fragment Activity()的onCreate()调用的)
SmartFragment fragment;
fragment = (SmartFragment) Fragment.instantiate(this,
fragmentClassName, params);
mStackOfFragments.add(fragment);
FragmentTransaction trans = getSupportFragmentManager().beginTransaction();
trans.add(R.id.tabcontent, fragment);
trans.addToBackStack(null);
trans.commitAllowingStateLoss();
Run Code Online (Sandbox Code Playgroud)
我希望它足够清楚
编辑1:
对getActivity()的调用:
protected OnDoneListener nDoneListener = new OnDoneListener() {
@Override
public void OnDone(final int counter, final String name) {
if (getActivity() != null)
((TabActivity) getActivity()).RunOnUiThread(new Runnable() {
Run Code Online (Sandbox Code Playgroud)
......
这个回调是从另一个类调用的.
编辑2:
class MemoryManager()
{
private OnDoneListener nDoneListener;
public void setOnDoneListener(OnDoneListener onDoneListener)
{
this.onDoneListner = onDoneListener;
}
public void updateUiOnRequestFinish()
{
onDoneListener.onDone();
}
}
Run Code Online (Sandbox Code Playgroud)
MemoryManaget本身从另一个回调调用updateUiOnRequestFinish()
编辑3:
FragmentManager日志是:
04-08 18:44:05.950: V/FragmentManager(16280): Commit: BackStackEntry{41f9bd60}
`04-08 18:44:05.950: D/FragmentManager(16280): mName=null mIndex=-1 mCommitted=false
04-08 18:44:05.950: D/FragmentManager(16280): Operations:
04-08 18:44:05.950: D/FragmentManager(16280): Op #0: ADD FragmentMyProfile{41f9bc20 id=0x7f070126}
04-08 18:44:05.950: V/FragmentManager(16280): Setting back stack index 0 to BackStackEntry{41f9bd60}
04-08 18:44:05.950: V/FragmentManager(16280): Run: BackStackEntry{41f9bd60 #0}
04-08 18:44:05.950: V/FragmentManager(16280): Bump nesting in BackStackEntry{41f9bd60 #0} by 1
04-08 18:44:05.950: V/FragmentManager(16280): Bump nesting of FragmentMyProfile{41f9bc20 id=0x7f070126} to 1
04-08 18:44:05.950: V/FragmentManager(16280): add: FragmentMyProfile{41f9bc20 id=0x7f070126}
04-08 18:44:05.950: V/FragmentManager(16280): Allocated fragment index FragmentMyProfile{41f9bc20 #0 id=0x7f070126}
04-08 18:44:05.950: V/FragmentManager(16280): moveto CREATED: FragmentMyProfile{41f9bc20 #0 id=0x7f070126}
04-08 18:44:05.950: V/FragmentManager(16280): moveto ACTIVITY_CREATED: FragmentMyProfile{41f9bc20 #0 id=0x7f070126}
04-08 18:44:05.990: V/FragmentManager(16280): moveto STARTED: FragmentMyProfile{41f9bc20 #0 id=0x7f070126}
04-08 18:44:06.030: V/FragmentManager(16280): moveto RESUMED: FragmentMyProfile{41f9bc20 #0 id=0x7f070126}
`
Run Code Online (Sandbox Code Playgroud)
它对我来说很好看.所以我猜这个bug与我从回调中调用getActivity()的方式有关.
小智 7
这个问题可以用于"android.app.Fragment"或"android.support.v4.app.Fragment"的getActivity()
如果您使用的是"android.support.v4.app.Fragment",则需要检查是否未使用"android.app.Fragment"中的getActivity,反之亦然.
| 归档时间: |
|
| 查看次数: |
17684 次 |
| 最近记录: |