2017-04-25 67 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 { 
     } 
    } 
}