2017-04-25 36 views
0

我想在ViewPager頁面添加一個類別欄。類別標題根據ViewPager頁面更改而改變。雖然我試圖做到這一點ViewPager工作正常,但標題不會改變。Viewpager設置文本功能

這是頁面佈局:

enter image description here

我添加下面的代碼在PagerAdapter

private class MyPagerAdapter extends FragmentPagerAdapter { 


public MyPagerAdapter(FragmentManager fm) { 

    super(fm); 
} 

@Override 
public Fragment getItem(int pos) { 

    TextView cate_title = (TextView) getActivity().findViewById(R.id.cate_title); 
    String title_name = ""; 
    switch(pos) { 
     case 0: 
      title_name = "MACARONS"; 
      cate_title.setText(title_name); 
      return new SP_macarons(); 
     case 1: 
      title_name = "CHOCOLATE"; 
      cate_title.setText(title_name); 
      return new SP_chocolate(); 
     case 2: 
      title_name = "CHEESE MOUSSE"; 
      cate_title.setText(title_name); 
      return new SP_cheese_mousse(); 
     default: 
      break; 
    } 
return null; 
} 

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

,這是Fragment代碼

public class SpecialCake extends Fragment { 
private ViewPager viewPager; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.special_cake, container, false); 


    final ViewPager pager = (ViewPager)view.findViewById(R.id.cate_pager); 
    pager.setAdapter(new MyPagerAdapter(getChildFragmentManager())); 

    ImageButton prebtn = (ImageButton) view.findViewById(R.id.leftarrow); 
    prebtn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 
      pager.setCurrentItem(getItem(-1), true); //getItem(-1) for previous 
     } 
     private int getItem(int i) { 
      return pager.getCurrentItem() + i; 
     } 
    }); 
    ImageButton nxtbtn = (ImageButton) view.findViewById(R.id.rightarrow); 
    nxtbtn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 
      pager.setCurrentItem(getItem(+1), true); //getItem(-1) for previous 
     } 
     private int getItem(int i) { 
      return pager.getCurrentItem() + i; 
     } 
    }); 

    return view; 
} 

回答

0

你可以有OnPageChangeListener

最初將標題設置爲MACARONS,然後在頁面更改時更改標題。

textView.setTitle("MACRONS); 

然後

pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

    } 

    @Override 
    public void onPageSelected(int position) { 
    String title_name = ""; 
    // depending on the position do something 
    if(position==0) 
    { 
     title_name = "MACARONS"; 
    } 
    else if(position==1) 
    { 
     title_name = "CHOCOLATE"; 
    } 
    else 
    { 
     title_name = "MACARONS"; 
    } 
    // Now set title to text 
    textView.setTitle(title_name); 
    } 
+0

這是爲我工作!但我有一個問題 當我第一次點擊進入該頁面時,cate_title是空白的。 我點擊下一步後,點擊回到第一頁,然後標題顯示出來。 – JsLaw

+0

在起始處設置標題。在OnpageChangeListener之前。我在答案中補充了這一點。 – Raghunandan

+0

謝謝你幫我解決問題! – JsLaw

0

您可以使用setUserVisibleHint在您的viewpager fragment中以確定它是否對用戶可見。

表格文檔:

設置的提示,系統對這個片段的UI是否是當前 對用戶可見。此提示默認爲true,並跨片段實例狀態保存和恢復持久 。

因此,將TextViewTextView cate_title = (TextView) getActivity().findViewById(R.id.cate_title);添加到您的分段的佈局。

,並添加以下代碼:

public class SP_macarons extends Fragment { 

    @Override 
    public void setUserVisibleHint(boolean isVisibleToUser) { 
     super.setUserVisibleHint(isVisibleToUser); 
     if (isVisibleToUser) { 
      title_name = "MACARONS"; 
      cate_title.setText(title_name); //card_title should be defined in your fragment 
     } 
     else { 
     } 
    } 
}