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