父fragment刷新子fragment无反应问题解决方法

    xiaoxiao2021-04-13  30

    项目遇见一个问题,父fragment在没有登陆的时候显示“登录”按钮,要求登录才能让子fragment的内容可见。

    其实点击父fragment的时候被隐藏不可见的子fragment就已经被创建了,但是这时候因为还没有登录,所以用户名是空字符串,没法通过用户名从服务器获取数据。

    这时候登陆完finish掉登录.activity,会执行父fragment.onActivityResult方法,将用户名放在显示用户名的TextView上。

    我在子fragment里面重写了onResume方法:

    @Override public void onResume() { getPublishDetail(); super.onResume(); }getPublishDetail方法用来获取数据,并为listview设置BaseAdapter。

    然后本想用父fragment去刷新子fragment,于是在子fragment里面定义了refrash方法,refrash可以重新获取数据,但是运行的时候总也不显示。

    在父fragment里面获取子fragment的方法在下面:

    首先为子fragment设置tag

    FragmentManager manager = getFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); FragmentPublishINGRentOut publishFragment = new FragmentPublishINGRentOut(); FragmentConsumptionRentOut consumptionFragment = new FragmentConsumptionRentOut(); FragmentFinashedRentOut finashedFragment = new FragmentFinashedRentOut(); FragmentRefundRentOut refundFragment = new FragmentRefundRentOut(); transaction.add(publishFragment, "publishFragment"); transaction.add(consumptionFragment, "consumptionFragment"); transaction.add(finashedFragment, "finashedFragment"); transaction.add(refundFragment, "refundFragment"); transaction.commit(); 然后通过tag获取到子fragment,并调用refrash方法,refrash方法有一个参数:userName,通过传入的用户名重新获取数据,调用 getPublishDetail方法。

    FragmentPublishINGRentOut publish = (FragmentPublishINGRentOut) getFragmentManager().findFragmentByTag("publishFragment"); publish.refrash(userName);结果就是不显示!!!!!什么鬼?

    查了好多资料,也改了好多次,尝试去掉这些,在onResume方法里面加上几句话:

    @Override public void onResume() { NavigationView navigationView = (NavigationView) getActivity().findViewById(R.id.nav_view); View heardLayout = navigationView.getHeaderView(0); TextView phoneNumber = (TextView) heardLayout.findViewById(R.id.phoneNumberTextView_navigationBarHeader); strPhoneNumber = phoneNumber.getText().toString(); getPublishDetail(); super.onResume(); }前面几句主要功能就是重新获取到用户名:strPhoneNum,然后再获取,居然成功了。

    找了一些资料,onResume方法是在布局显示在屏幕上被用户可见时调用,仔细想了一下,最开始子fragment的布局是被隐藏的,虽然被创建了,但是不可见,当登录成功后,子fragment的内容显示了,这时候会调用onResume方法。

    那么为什么最开始没重新获取用户名的时候不显示呢?原因是这样的:当子fragment的内容被用户可见的时候,子fragment其实早在父fragment被点击显示的时候就已经被创建了,虽然变味了可见状态,但是只会重新执行onResume方法,并不会重新执行onCreate方法和onCreateView方法,可是获取用户名的操作在onCreateView方法里面,那个时候获取到的还只是空字符串,所以即使调用了onResume方法传给服务器的也只是空字符串,这样是查不到数据的,所以仍然显示一片空白,没有数据可以显示。

    下面附其他人写的文章,生命周期:

    https://wenku.baidu.com/view/38de45165f0e7cd1842536d5.html

    http://blog.csdn.net/hjj0212/article/details/8530273

    转载请注明原文地址: https://ju.6miu.com/read-669419.html

    最新回复(0)