2016-03-16 37 views
2
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个选项卡,所以我想刷新每次改变tab.I尝试做时间内的onResume(),但它也不能加工。

+0

分享你的代码,你在标签布局中添加片段.. –

+0

好吧,我分享了它。 – Lakshan

+0

查看我的回答下面 –

回答

-1

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

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

@downvoter:你能解释一下,为什么在这里downvote? –

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

希望这会帮助你。尽管我没有尝试过。只要写信,请让我知道,如果你有任何错误。

+0

我认为它应该是adapter.addFragmentTitle(“Daily”); – Lakshan

+0

是的,你是对的...更新了答案 –

+0

它没有工作兄弟仍然像以前一样。 – Lakshan

0

我解决了类似的问题。我的四个选项卡(与运动员有关的运动计时器 - 滑雪者或骑行者 - 间隔开始)也需要相互沟通。例如,一旦比赛开始,必须禁用设置控制。 我的项目基于Google的SlidingTabsColors示例。 我创建了一个简单的方法接口,名为Refreshable,并且我的每个选项卡(片段)都实现了其方法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); 
     } 
    } 

在我的情况下,这段代码在我的Observer的update方法中。我的数据已经改变(比赛开始,间隔倒计时结束,修整器记录),我可以刷新所有标签。由于种族(无双关语)条件,我无法从一个标签到另一个标签。

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

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

每个选项卡的刷新方法都有自己的功能。

您可能不需要协调所有选项卡的观察者,但至少您会有一个对他们的引用,以及除了onResume(它也不适用于我)的方法来调用并更新内容本身。

0

我现在已经解决了这个类型的问题。请将我的代码行改为line.it可能会帮助你。

谢谢。

ViewPager viewPager; 
ViewPagerAdapter adapter; 


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


viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

     @Override 
     public void onPageSelected(int position) { 
      adapter.getItem(position).onResume(); 
     } 

     @Override 
     public void onPageScrolled(int arg0, float arg1, int arg2) { 
     } 

     @Override 
     public void onPageScrollStateChanged(int arg0) { 
     } 
    }); 


public void setupViewPager(ViewPager upViewPager) { 
    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); 
} 
+0

这是正确的方法吗? –

1

你的回答....您必须使用

viewPager.setAdapter(adapter); 

当您选择的选项卡更改时。

相关问题