当前位置: 首页 > 知识库问答 >
问题:

如何从viewpager android中刷新或更新所有片段

易淳
2023-03-14
public static final String TAG = "TWO_FRAGMENT";

@Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);

        if (isVisibleToUser) {

        } else {
            mAuth = FirebaseAuth.getInstance();
            userRef = FirebaseDatabase.getInstance().getReference("user_course");
            users = FirebaseAuth.getInstance().getCurrentUser();
            daftarTugasRef = FirebaseDatabase.getInstance().getReference("tugas");
            mTugasRef = FirebaseDatabase.getInstance().getReference("tugas_course");
            mFlagTugas = FirebaseDatabase.getInstance().getReference("flag_tugas");

            LoadData();
        }
    }


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

    v =  inflater.inflate(R.layout.fragment_two, container, false);

swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                new Handler().postDelayed(new Runnable() {

                    @Override public void run() {
                        LoadData();
                        swipeLayout.setRefreshing(false);
                        listTugas.clear();

                    }
                    private void onLoaded() {
                        swipeLayout.setEnabled(true);
                        swipeLayout.setRefreshing(false);
                    }

                }, 500);
            }
        });
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

       viewPager = (ViewPager) findViewById(R.id.viewpager);
        viewPager.setOffscreenPageLimit(3);
        setupViewPager(viewPager);
        viewPager.setCurrentItem(position);
        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);
reloadFragment("TWO_FRAGMENT");

        setupTabIcons();
}

private void setupViewPager(ViewPager viewPager) {
        adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFrag(new OneFragment(), "ONE");
        adapter.addFrag(new TwoFragment(), "TWO");
        adapter.addFrag(new ThreeFragment(), "THREE");
        viewPager.setAdapter(adapter);
        viewPager.getAdapter().notifyDataSetChanged();
    }




    class ViewPagerAdapter extends FragmentStatePagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }



        public void addFrag(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public int getItemPosition(@NonNull Object object) {
            return POSITION_NONE;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }




    @Override
    public void onPageSelected(int position) {
//        viewPager.getAdapter().notifyDataSetChanged();

//        adapter.notifyDataSetChanged();
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }

protected void reloadFragment(String TAG){
        // Reload current fragment
        Fragment frg = null;
        frg = this.getSupportFragmentManager().findFragmentByTag(TAG);
        FragmentTransaction ft =this.getSupportFragmentManager().beginTransaction();
        ft.detach(frg);
        ft.attach(frg);
        ft.commit();
    }

共有1个答案

熊朝
2023-03-14

您可以使用EventBus,将其放在所有片段中:

 @Override
 public void onStart() {
     super.onStart();
     EventBus.getDefault().register(this);
 }

 @Override
 public void onStop() {
     super.onStop();
     EventBus.getDefault().unregister(this);
 }


@Subscribe(threadMode = ThreadMode.MAIN)
    public void onEvent(ViewEvent viewEvent) {
        if (viewEvent.getMessage().equals("updateViews")) {
            updateView();

        }


    }

当您想要更新时,可以发送如下所示的事件:

 EventBus.getDefault().post(new ViewEvent("updateViews"));

ps:ViewEvent是一个必须创建的对象,该对象要发送到所有suscribed片段。

public class ViewEvent {

    private String message;

    public ViewEvent( String message) {

        this.message = message;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}
 类似资料:
  • 我基本上是在中更新一个值,并使用将其发送到片段。所有片段都应该在上显示相同的值。 我的问题是我的应用程序有3个片段页面,只有中间的页面(Fragment_B)在更新... 为什么所有的片段不同时更新?该值从不显示在Fragment_A和fragment_c上。 应该更新所有的片段,但它只更新片段B。但是我试图调试这个问题,并创建了和SetText,它适用于每个片段。我不知道为什么会这样。有人能帮帮

  • 问题内容: 我正在使用Java进行项目,因此需要在单击特定按钮后重新加载整个程序。这该怎么做? 问题答案: 尝试 如果仍然无法使用,请在完成上述步骤后尝试

  • 下面是: 这是我要用于向中添加项的方法

  • 问题内容: 我有一个具有单个 视图* 的 Eclipse插件 (例如eclipse helloworld-view-plugin- project)。在视图文件中 ,我想更新视图时 得到一个 事件 。 *** 在此视图中,我在一个具有多个标签的组中有一个GridData。我有几个 注册到程序的服务,其状态应 在此GridData中显示。 编辑:为了更好地显示我的问题,我更新了这篇文章,并添加了整个

  • 我有一个带有FragmentStateAdapter()适配器的viewpage er2。我还有一个带有4个选项卡的选项卡布局。我为所有选项卡使用单个片段。这被命名为AllOrdersTabb。在我的架构中,我只是发送不同的值来将不同的API数据加载到AllOrdersTab片段。当选择每个选项卡布局时,创建一个片段并首次为所有4个片段正常工作。之后,如果我刷回上一个选项卡,它就不会再次创建或刷新

  • 问题内容: 我是Angular和ui路由器的新手。当某人选择一个模型并且我的控制器执行标准的SHOW方法时,我只想更新URL以包括模型的ID,而无需刷新页面,然后继续原始视图。我不确定该怎么做… 问题答案: 您使用的代码段与正确的 ui路由器 设置有点不同。我会建议您,检查此演示应用程序:http : //angular-ui.github.io/ui- router/sample/#/conta