2016-03-16 66 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); 

當您選擇的選項卡更改時。

相關問題