0
我使用PageViewer和FragmentPageAdapter实现了swipable选项卡页面。 我想在登录后更改所有片段。如何替换FragmentPageAdapter中的所有片段
public class TabFragmentPagerAdapter extends FragmentPagerAdapter implements FragmentChangeListener {
TabFragment tabFragment[];
FragmentManager mFragmentManager;
boolean mNeedRefresh = false;
public TabFragmentPagerAdapter(FragmentManager fm) {
super(fm);
tabFragment = new TabFragment[4];
mFragmentManager = fm;
}
@Override
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
Log.d(this.toString(), "getItem:position="+position);
if (position<0 || position>getCount())
return null;
if (tabFragment[position]==null) {
switch (position) {
case 0:
tabFragment[position] = MapFragment.newInstance(this, position);
break;
default:
tabFragment[position] = BeforeLoginFragment.newInstance(this, position);
break;
}
}
return tabFragment[position];
}
@Override
public int getItemPosition(Object object) {
Log.d(this.toString(), "getItemPosition:object="+object.toString());
int tabPosition = ((TabFragment)object).getTabPosition();
//if (mNeedRefresh && ((TabFragment)object).getFragmentClassName() != tabFragment[tabPosition].getFragmentClassName()) {
if (((TabFragment)object).getFragmentClassName() == tabFragment[tabPosition].getFragmentClassName()) {
Log.d(this.toString(), "POSITION_UNCHANGED");
return POSITION_UNCHANGED;
} else {
mNeedRefresh = false;
Log.d(this.toString(), "POSITION_NONE");
return POSITION_NONE;
}
}
@Override
public int getCount() {
return 4;
}
@Override
public void onLoginChangeRequest() {
Log.d(this.toString(), "onLoginChangeRequest");
FragmentTransaction transaction = mFragmentManager.beginTransaction();
for (int i=1; i<getCount(); i++)
{
transaction.remove(tabFragment[i]);
switch (i) {
case 1:
case 2:
tabFragment[i] = MapFragment.newInstance(this, i);
break;
case 3:
tabFragment[i] = MapFragment.newInstance(this, i);
break;
}
}
transaction.commit();
mNeedRefresh = true;
notifyDataSetChanged();
}
}
public class RegisterStep03Fragment extends TabFragment implements OnClickListener, OnTaskCompleted {
@Override
public void onClick(View v) {
final String items[] = getResources().getStringArray(R.array.item_array_gender);
switch (v.getId()) {
case R.id.completeButton:
RegisterNewUser();
}
}
private void RegisterNewUser() {
DownloadJSONObjectAsyncTask task = new DownloadJSONObjectAsyncTask();
task.setOnTaskCompletedListener(this);
task.execute(...);
}
@Override
public void onTaskCompleted(JSONObject jsonObj) {
try {
if (jsonObj.getString("result").equals("success")) {
getListener().onLoginChangeRequest();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
但是当我在上面的源代码中调用“RegisterNewUser”方法时,会发生以下错误。 我在这里做错了什么?
FATAL EXCEPTION: main
java.lang.NullPointerException
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:651)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
at android.support.v4.view.ViewPager.dataSetChanged(ViewPager.java:892)
at android.support.v4.view.ViewPager$PagerObserver.onChanged(ViewPager.java:2805)
at android.database.DataSetObservable.notifyChanged(DataSetObservable.java:37)
at android.support.v4.view.PagerAdapter.notifyDataSetChanged(PagerAdapter.java:276)
at com.flagmon.adapter.TabFragmentPagerAdapter.onLoginChangeRequest(TabFragmentPagerAdapter.java:132)
at com.flagmon.fragment.RegisterStep03Fragment.onTaskCompleted(RegisterStep03Fragment.java:189)
at com.flagmon.task.DownloadJSONObjectAsyncTask.onPostExecute(DownloadJSONObjectAsyncTask.java:38)
at com.flagmon.task.DownloadJSONObjectAsyncTask.onPostExecute(DownloadJSONObjectAsyncTask.java:1)
at android.os.AsyncTask.finish(AsyncTask.java:631)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)