gpt4 book ai didi

android - 重新加载 fragment 不起作用

转载 作者:行者123 更新时间:2023-11-29 20:41:40 24 4
gpt4 key购买 nike

我有以下情况:NavigationDrawer 创建一个 Fragment 来处理用户信息。 onCreateView() 上的 fragment 调用 Web 服务并返回 View 。当 Web 服务完成回调时,分离和附加自身的 fragment 。当第二次在 onCreateView() 上附加 Fragment 时,应该创建一个包含用户信息的 View 。但实际上发生的是 View 没有改变。

我错过了什么?

提前谢谢你,

fragment 代码:

private boolean mIsRefresh = false;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

// Gets Application Context
mContext = getActivity().getApplicationContext();

// Set up environment to use DataBase
mGlobal = (Global) getActivity().getApplicationContext();
mDAOFactory = mGlobal.getDAOFactory();

mFragment = this;

mFragmentView = inflater.inflate(R.layout.fragment_user_info, container, false);


buildView();

if (mIsRefresh) {
return mFragmentView;
}else {
return null;
}
}

这是 buildView() 代码:

private void buildView() {

mEtUserName = (EditText) mFragmentView.findViewById(R.id.userName);
mEtUserEmail = (EditText) mFragmentView.findViewById(R.id.userEmail);
mEtPassword = (EditText) mFragmentView.findViewById(R.id.password);
mEtPasswordConfirmation = (EditText) mFragmentView.findViewById(R.id.passwordConfirmation);
mIbSendPassword = (ImageButton) mFragmentView.findViewById(R.id.sendPassword);
mAcUserCountry = (AutoCompleteTextView) mFragmentView.findViewById(R.id.userCountry);
mEtUserState = (EditText) mFragmentView.findViewById(R.id.userState);
mEtUserCity = (EditText) mFragmentView.findViewById(R.id.userCity);
mEtUserPhoneNumberCountry = (EditText) mFragmentView.findViewById(R.id.userPhoneNumberCountry);
mEtUserPhoneNumberCity = (EditText) mFragmentView.findViewById(R.id.userPhoneNumberCity);
mEtUserPhoneNumber = (EditText) mFragmentView.findViewById(R.id.userPhoneNumber);
mCbTCAccepted = (CheckBox) mFragmentView.findViewById(R.id.cbTCAccepted);


// User has not been created
if (mGlobal.getUserUID() == 0) {
getUserEmail();
getUserLocation();

} else {
if (mIsRefresh) {
formatView();
} else {
getDataOnServer();
}
}

}

这是调用 Web 服务的代码:

private void getDataOnServer () {

mUserDAO = mDAOFactory.getUserDAO(mContext);

final ProgressDialog progressDialog = ProgressDialog.show (getActivity(),
getString(R.string.msgConnectingServer), getString(R.string.msgGettingData), true);

//TODO Retirar o set abaixo
mGlobal.setUserUID(1);

mUserDAO.getUserByUID(mGlobal.getUserUID(), new Callback<User>() {
@Override
public void success(User user, Response response) {
mUser = user;
mIsRefresh = true;
refresh();
}

@Override
public void failure(RetrofitError error) {
mUser = null;
Log.e(getClass().getName(), "Retrofit Error = " + error);
refresh();
}

private void refresh() {
progressDialog.dismiss();
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.detach(mFragment)
.attach(mFragment)
.commit();

}
});
}

最后是 onStart()

@Override
public void onStart() {
super.onStart();

if (mIsRefresh) {
mIsRefresh = false;
getFragmentManager().beginTransaction()
.remove(mFragment)
.add(R.id.content_frame, mFragment)
.commit();
}

}

最佳答案

代替

FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.detach(mFragment).attach(mFragment).commit();

这样做:

    YourFragment mFragment = getSupportFragmentManager().findFragmentByTag("Your_Fragment_TAG"); //if you are using support library
//OR
YourFragment mFragment = getFragmentManager().findFragmentByTag("Your_Fragment_TAG"); //if you are using support library

FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.detach(mFragment);
ft.attach(mFragment).commit();

关于android - 重新加载 fragment 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30951745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com