Viewpager 设置文本功能

Viewpager Set Text Function

我想在 ViewPager 页面中添加一个类别栏。类别标题根据 ViewPager 页面变化而变化。虽然我尝试这样做 ViewPager 工作正常但标题没有改变。

这是页面布局:

我在 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;
}

您可以在 viewpager fragment 中使用 setUserVisibleHint 来确定它是否对用户可见。

表单文档:

Set a hint to the system about whether this fragment's UI is currently visible to the user. This hint defaults to true and is persistent across fragment instance state save and restore.

因此,将 TextView TextView 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 {
        }
    }
}

你可以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);
    }