gpt4 book ai didi

android - 如何刷新或更新 viewpager android 中的所有 fragment

转载 作者:行者123 更新时间:2023-11-29 23:28:52 26 4
gpt4 key购买 nike

我有带tablayout的viewpager,里面有3个 fragment 。在我的 fragment 2 和 3 中,我滑动刷新以更新来自 firebase 数据库的数据。

我希望它用工具栏中的 1 个按钮刷新,并刷新其中的所有 fragment 。

另外一个问题是,我必须刷新 2 次 fragment 才能更新 recyclerview.....我不知道该怎么做,请帮助

双 fragment

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);
}
});

主 Activity

    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();
}

最佳答案

您可以使用 EventBus ,将其放入您所有的 fragment 中:

 @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 是一个对象,您必须创建该对象并发送给所有订阅的 fragment 。

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;
}
}

关于android - 如何刷新或更新 viewpager android 中的所有 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53059171/

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