在选项卡视图中,我想要在每次更改时刷新Fragment

时间:2016-03-16 11:02:07

标签: android android-fragments

viewPager = (ViewPager) findViewById(R.id.tabanim_viewpager);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabanim_tabs);
setupViewPager(viewPager);
tabLayout.setupWithViewPager(viewPager);

 public void setupViewPager(ViewPager upViewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFrag(new ViewTodayFragment(),"Daily");
        adapter.addFrag(new ViewWeekFragment(),"Weekly");
        adapter.addFrag(new ViewMonthFragment(),"Monthly");
        adapter.addFrag(new ViewYearFragment(),"Yearly");
        viewPager.setAdapter(adapter);
    }

我希望每次更换标签时都刷新片段。

内部片段这是我的代码

public class ViewTodayFragment extends Fragment {
    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";
    RecyclerView recyclerView;
    RecyclerView.LayoutManager mLayoutManager;
    RecyclerView.Adapter mAdapter;
    // TODO: Rename and change types of parameters
    View v;
    ListView listview;
    private ArrayList<DailyModel> mItems;
    public static String datesel="a";

    public ViewTodayFragment() {
        // Required empty public constructor
    }




    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
        v=inflater.inflate(R.layout.fragment_view_today, container, false);
        recyclerView =(RecyclerView)v.findViewById(R.id.view_today_lv_today);
        recyclerView.setHasFixedSize(true);
        mLayoutManager = new LinearLayoutManager(getActivity());
        recyclerView.setLayoutManager(mLayoutManager);
        loadData();
        return v;
    }

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

    public void loadData(){
        mItems=new ArrayList<DailyModel>();
        List<Income> ll = null;
        Log.d("ALLL",datesel);
        if(datesel.equals("a")){
            Calendar cw = Calendar.getInstance();
            SimpleDateFormat format1 = new SimpleDateFormat("dd-MM-yyyy");
            String currentDay=format1.format(cw.getTime());
            ll=new IncomeHandler(getActivity()).getIncomeByThisDay(currentDay);
        }else{
            ll=new IncomeHandler(getActivity()).getIncomeByThisDay(datesel);
        }
        for (int i = 0; i < ll.size(); i++) {
            DailyModel a=new DailyModel();
            a.setCategory(ll.get(i).getWay());
            a.setDescription(ll.get(i).getDes());
            a.setType(ll.get(i).getType());
            a.setBank("Bank");
            a.setAmount(ll.get(i).getAmount());
            mItems.add(a);
        }
        mAdapter = new DailyAdapter(mItems);
        recyclerView.setAdapter(mAdapter);
    }

}

所以这样有4个标签,所以我想每次更改标签时都要刷新。我尝试在OnResume()内部进行操作。但它也无效。

6 个答案:

答案 0 :(得分:1)

像这样创建你的寻呼机适配器。

class PagerAdapter extends FragmentPagerAdapter {
      private final List<String> fragmentTitleList = new ArrayList<>();
        public PagerAdapter(FragmentManager fragmentManager) {
            super(fragmentManager);
        }

    public void addFragmentTitle(String title) {
        fragmentTitleList.add(title);
    }

        @Override
        public Fragment getItem(int position) {
            if (position == 0) {
                return new ViewTodayFragment();
            } else if (position == 1) {
                return new ViewWeekFragment();
            } else if(position == 2){
                return new ViewMonthFragment();
            } else{
                return new ViewYearFragment();
            }
        }

        @Override
        public int getCount() {
            return 4;
        }

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


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

    }

现在你需要像这样添加片段

PagerAdapter pagerAdapter = new PagerAdapter(getSupportFragmentManager());
adapter .addFragmentTitle("Daily");
//..... add rest of the fragment title.
 viewPager.setAdapter(pagerAdapter );
希望这会对你有所帮助。虽然我没试过这个。如果你有任何错误,请写信告诉我。

答案 1 :(得分:1)

你的答案....你必须使用

$(function(){
    var bgimage = new Image();      
    bgimage.src="https://www.switchbacktravel.com/sites/default/files/images/articles/Hiking%20photo.jpg";       
    $("#child-background").hide();     
    $(bgimage).load(function(){
        $("#child-background").css("background-image","url("+$(this).attr("src")+")").fadeIn(2000); 
     }); 
});

当您选择的标签发生变化时。

答案 2 :(得分:0)

答案 3 :(得分:0)

我解决了类似的问题。我的四个标签(运动员的运动计时器 - 滑雪者或骑自行车 - 每隔一段时间开始)也需要相互沟通。例如,一旦开始比赛,必须禁用设置控件。 我的项目基于Google的SlidingTabsColors示例。 我创建了一个简单的方法接口,名为Refreshable,我的每个标签(Fragments)都实现了refresh方法。 在我的SlidingTabsFragment(扩展片段)中,我重写了instantiateItem,因此我可以捕获对每个标签片段的引用。

        // Here we can safely save a reference to the created
        // Fragment, no matter where it came from (either getItem() or
        // FragmentManger).
        //
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            Fragment createdFragment = (Fragment) super.instantiateItem(container, position);

            /**
             * Save Fragment references in an array with the MainActivity
             * so that other tabs can be refreshed (state updated) depending on
             * changes to other tabs.
             */
            MainActivity a = (MainActivity)getActivity();
            a.addFragment((Refreshable)createdFragment);
            return createdFragment;
        }

我的主要是我的数据模型的观察者,但你的可能不同。

这是“注册”片段的主要方法。

     /**
     * Accepts the specified fragment and adds to the list of "Refreshable" Fragments.
     * If it is already registered, it is not added a second time.
     *
     * @param fragment
     *            the Fragment (Observer) to add.
     */
    public void addFragment(Refreshable fragment) {
        if (fragment == null) {
            throw new NullPointerException("fragment == null");
        }
        synchronized (this) {
            if (!mRefreshables.contains(fragment))
                mRefreshables.add(fragment);
        }
    }

就我而言,此代码位于我观察者的update方法中。我的数据发生了变化(比赛开始,间隔倒计时到期,记录了终结者),我可以刷新所有标签。由于种族(没有双关语)的条件,我不能从一个标签打到另一个标签。

/**
 * Call refresh on every Fragment to update state.
 */

for (Refreshable refreshable : array) {
    refreshable.refresh();
}

每个标签的刷新方法都有自己的功能。

您可能不需要Observer协调所有选项卡,但至少您将有一个对它们的引用和onResume以外的方法(对我来说也不起作用)来调用并让内容自行刷新

答案 4 :(得分:0)

我目前解决了这个类型问题。请逐行恢复我的代码。可能会帮助你。

感谢。

<th ng-repeat="(key,value) in products[0]">{{key}}</th>

答案 5 :(得分:-2)

您可以在活动的每个更改中使用以下代码来刷新片段。

 getActivity.finish();
 getActivity.startActivity(getActivity.getIntent());