java - fragment 刷新?

标签 java android

我的应用程序由两个 fragment 的主要 Activity 组成,我正在使用带有选项卡的 FragmentStatePagerAdapter,我想要的是每次单击第一个 fragment 的选项卡或滑动到它时刷新第一个 fragment ,我尝试了很多解决方案,但没有一个接缝有效,我使用 onStart 和 setUserVisibleHint 因此,如果它们都是 true,则应该刷新 fragment ,但我得到相同的内容。

我的代码如下

public class MainActivity extends AppCompatActivity {

    TabLayout tabLayout;
    ViewPager viewPager;
    CustomAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getSupportActionBar().setElevation(0f);


        viewPager = (ViewPager) findViewById(R.id.viewpager);
        viewPager.setAdapter(new CustomAdapter(getSupportFragmentManager(), getApplicationContext()));

        tabLayout = (TabLayout) findViewById(R.id.tab);
        tabLayout.setupWithViewPager(viewPager);

        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());

            }
        });


        }
    }




    class CustomAdapter extends FragmentStatePagerAdapter {

        private String[] fragments  = {"Fragment1","Fragment2"};


        public CustomAdapter(FragmentManager supportFragmentManager, Context applicationContext) {
            super(supportFragmentManager);
        }


        @Override
        public Fragment getItem(int position) {
            switch (position){
                case 0:
                    return new Fragment1();
                case 1:
                    return new Fragment2();
                default:
                    return null;
            }
        }

        @Override
        public int getCount() {
            return fragments.length;
        }
        @Override
        public CharSequence getPageTitle(int position){

            return fragments[position];
        }

        @Override
        public int getItemPosition(Object object) {
            return POSITION_NONE;
        }
    }
<小时/> <小时/>
public class Fragment1 extends Fragment {


    private Boolean isVisible = false;
    private Boolean isStarted = false;

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

  // Fragments code 

        return rootView;
    }



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

    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        isVisible = isVisibleToUser;
        if (isVisible && isStarted) {
            refrehList();
            Log.i("Tag", "reloading fragment");
        }

    }

    @Override
    public void onStart() {
        super.onStart();
        isStarted = true;

    }
    @Override
    public void onStop() {
        super.onStop();
        isStarted = false;
    }

    public void refrehList() {
        android.support.v4.app.FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.detach(this).attach(this).commit();

    }
}

最佳答案

您的代码是正确的。为了在用户可见时刷新 fragment ,您可以使用:

  @Override
    public void setUserVisibleHint(boolean visible) {
        super.setUserVisibleHint(visible);
        if (visible) {
            Log.i("Tag", "reloading fragment");
        }
    }

在您的代码中,您似乎从未将 isStarted 标志设置为 true,因此您朝自己的腿开枪了;)

关于java - fragment 刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48888470/

相关文章:

java - com.itextpdf.text.exceptions.IllegalPdfSyntaxException : Unbalanced begin/end text operators

java - 如何在 Spring Boot 中设置 ActiveMQ 端口?

android - 如何更新firebase实时数据库中特定子节点的值?

android - 失败保存状态 - 目标不在 fragment 管理器中 (setTargetFragment)

java - Sonar 误报, "change condition so that it does not always evaluate to true."

java - 测试是否对返回 Void 的方法内的变量调用了方法

android - 让 Nexus S Android NFC 进入卡模拟模式

java - 每 5 分钟检查一次时间并将其与按钮的时间进行比较 - Android

java - 如何设置元素在所有设备上保持原位

逗号而不是点的Java float