代码之家  ›  专栏  ›  技术社区  ›  Atif Hussain

刷新选项卡式布局viewpager中的当前片段

  •  0
  • Atif Hussain  · 技术社区  · 8 年前

    我正在尝试刷新viewpager选项卡式布局中的当前片段。我有 一个片段(UserProgressFragment) 创建ViewPager并设置 适配器(UserProgressAdapter) 以及创建选项卡式布局。

    在我的UserProgressAdapter中,在getItem()方法中,我根据我所在的选项卡返回另外两个片段(UserWeightTrackerFragment和UserCarolicoCounterFragment)。

    我的问题是,由于对viewpager和adapter的访问是在UserProgressFragment中设置的,因此如何通过单击按钮刷新片段并从UserCarrioCounterFragment更新其内容/视图? 我已经考虑过为适配器notifyDataChange,但我不知道如何从这个类调用它,因为它是在UserProgressFragment类上设置的。如果需要上下文,刷新此页面的目的是更新特定视图,即图表。

    我已附上以下代码:

    UserProgressFragment

    public class UserProgressFragment extends Fragment{
    
    
    public static UserProgressFragment newInstance() {
        return new UserProgressFragment();
    }
    
    public UserProgressFragment() {
        // Required empty public constructor
    }
    
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view =  inflater.inflate(R.layout.fragment_user_progress, container, false);
    
        ViewPager viewPager = view.findViewById(R.id.progress_viewpager);
        viewPager.setAdapter(new UserProgressTabsAdapter(getChildFragmentManager()));
    
        TabLayout tabLayout = view.findViewById(R.id.progress_sliding_tabs);
        tabLayout.setupWithViewPager(viewPager, true);
    
        return view;
    
        }
    }
    

    用户进度选项卡适配器

    public class UserProgressTabsAdapter extends FragmentStatePagerAdapter {
    
    private static final int PAGE_COUNT = 2;
    private String tabTitles[] = new String[]{"Weight Tracker", "Calorie Counter"};
    
    public UserProgressTabsAdapter(FragmentManager fm) {
        super(fm);
    }
    
    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return UserWeightTrackerFragment.newInstance(position);
    
            case 1:
                return UserCalorieCounterFragment.newInstance(position + 1);
        }
        return null;
    }
    
    @Override
    public int getCount() {
        return PAGE_COUNT;
    }
    
    @Override
    public CharSequence getPageTitle(int position) {
        // Generate title based on item position
        return tabTitles[position];
    }
    

    UserCarrioCounterFragment(需要刷新此)

    public class UserCalorieCounterFragment extends Fragment implements View.OnClickListener, AdapterView.OnItemSelectedListener {
    
    public static final String ARG_PAGE = "ARG_PAGE";
    
    public static UserCalorieCounterFragment newInstance(int page) {
        Bundle args = new Bundle();
        args.putInt(ARG_PAGE, page);
        UserCalorieCounterFragment fragment = new UserCalorieCounterFragment();
        fragment.setArguments(args);
        return fragment;
    }
    
    public UserCalorieCounterFragment() {
        // Required empty public constructor
    }
    
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        int mPage = getArguments().getInt(ARG_PAGE);
    }
    
     @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_user_calorie_counter, container, false);
    
        Button mAddCalories = view.findViewById(R.id.btn_add_calorie);
        mAddCalories.setOnClickListener(this);
    
        return view;
    }
    
    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_add_calorie:
                //REFRESH/UPDATE HERE 
                break;
        }
    }
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   Alireza Noorali Pedro Gonzalez    7 年前

    您可以在片段中创建一个公共方法,该方法包含将包含 notifyDataSetChanged() 作用在查看寻呼机片段/项目中,您可以调用 getParentFragment() 然后键入cast it to your parent/first fragment并访问该公共方法 notifyDataSetChanged() .

    推荐文章