为什么我的片段无法加载正确的视图?
问题描述:
我有涉及使用根据其状态的两个XML文件的片段。因此,我希望设定一个观点“如果”一个班是活跃的“其他”我希望它设置另一个观点。但是我正在遇到的错误,有在logcat中图所示为什么我的片段无法加载正确的视图?
public class MainInstagramActivity extends Fragment {
private InstagramSession mInstagramSession;
private Instagram mInstagram;
private ProgressBar mLoadingPb;
private GridView mGridView;
private static final String CLIENT_ID = "";
private static final String CLIENT_SECRET = "";
private static final String REDIRECT_URI = "";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
if (mInstagramSession.isActive()) {
View view = LayoutInflater.from(getActivity()).inflate(
R.layout.activity_user_instagram, null);
return view;
}
else {
View view = LayoutInflater.from(getActivity()).inflate(
R.layout.activity_main_instagram, null);
return view;
}
}
@Override
public void onViewCreated(View container, Bundle savedInstanceState) {
super.onViewCreated(container, savedInstanceState);
mInstagram = new Instagram(getActivity(), CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
mInstagramSession = mInstagram.getSession();
if (mInstagramSession.isActive()) {
View view = LayoutInflater.from(getActivity()).inflate(
R.layout.activity_user_instagram, null);
InstagramUser instagramUser = mInstagramSession.getUser();
mLoadingPb = (ProgressBar)container.findViewById(R.id.pb_loading);
mGridView = (GridView)container.findViewById(R.id.gridView);
((TextView) container.findViewById(R.id.tv_name)).setText(instagramUser.fullName);
((TextView) container.findViewById(R.id.tv_username)).setText(instagramUser.username);
((Button) container.findViewById(R.id.btn_logout)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
mInstagramSession.reset();
startActivity(new Intent(getActivity(), MainInstagramActivity.class));
getActivity().getFragmentManager().popBackStack();
}
});
ImageView userIv = (ImageView) container.findViewById(R.id.iv_user);
DisplayImageOptions displayOptions = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic_user)
.showImageForEmptyUri(R.drawable.ic_user)
.showImageOnFail(R.drawable.ic_user)
.cacheInMemory(true)
.cacheOnDisc(false)
.considerExifParams(true)
.build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getActivity())
.writeDebugLogs()
.defaultDisplayImageOptions(displayOptions)
.build();
ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.init(config);
AnimateFirstDisplayListener animate = new AnimateFirstDisplayListener();
imageLoader.displayImage(instagramUser.profilPicture, userIv, animate);
new DownloadTask().execute();
} else {
View view = LayoutInflater.from(getActivity()).inflate(
R.layout.activity_main_instagram, null);
((Button) container.findViewById(R.id.btn_connect)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
mInstagram.authorize(mAuthListener);
}
});
}
}
logcat的命名mInstagramSession
09-22 10:41:31.065 986-986/com.virtualinsomniac.annaakana E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.virtualinsomniac.annaakana, PID: 986
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean instagramlibrary.InstagramSession.isActive()' on a null object reference
at com.virtualinsomniac.annaakana.Instagram.MainInstagramActivity.onCreateView(MainInstagramActivity.java:63)
at android.app.Fragment.performCreateView(Fragment.java:1704)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1063)
at android.app.BackStackRecord.run(BackStackRecord.java:684)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1448)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
at android.os.Handler.handleCallback(Handler.java:738)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5070)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:836)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:631)
答
控制进入onViewCreated之前onCreateView。这是你得到错误的原因。初始化onCreateView中的instagram和instagramsession对象。它应该可以正常工作!
把这些线在onCreateView方法
mInstagram =新的Instagram(getActivity(),CLIENT_ID,CLIENT_SECRET,REDIRECT_URI);
mInstagramSession = mInstagram.getSession();
答
你的对象为null在onCreateView空对象。你应该首先启动InstagramSession。
答
我认为onCreateView
是onViewCreated
之前执行。这就是为什么你的参考为空。
从onViewCreated
文档:
onCreateView后立即调用(LayoutInflater,ViewGroup中, 束)返回
名字还挺建议呢! ;) – BenjaminPaul 2014-09-23 13:44:24