ImageButtons 在返回到旧视图 Pager 片段时保持不变
ImageButtons Remains unchanged when returned to an old view Pager fragment
我有一个 HomeActivity,我在其中使用了 ViewPager。向右滑动时会出现 2 个片段 home1F 和 home2F。 HomeActivity 有一个顶部栏(由 Linerlayout 使用),其中有 2 个图像按钮。当 home1F 在屏幕中时,显示一个按钮(另一个不可见),当 home2F 在屏幕中时,显示另一个按钮,而第一个按钮不可见。
但是当我 运行 我首先发现的应用程序时,第二个按钮是可见的而不是第一个按钮(当有 home1F 时)。当我滑动到 home2F 时没有任何反应。当我向左滑动回到 home1F 时,仍然没有任何反应。
代码如下:
private class MyPagerAdapter extends FragmentPagerAdapter {
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int pos) {
switch(pos) {
case 0:
//imagebutton-1 visible
//imagebutton-2 invisible
return Home1F.newInstance("FirstFragment, Instance 1");
case 1:
//imagebutton-1 invisible
//imagebutton-2 visible
return Home2F.newInstance("SecondFragment, Instance 1");
default:
//imagebutton-1 visible
//imagebutton-2 invisible
return Home1F.newInstance("FirstFragment, Instance 1");
}}
@Override
public int getCount() {
return 2;
}
}
if you want to switch out the actual fragments that are being displayed, you need to avoid FragmentPagerAdapter and use FragmentStatePagerAdapter.
使用getItemPosition()
我们可以更新片段。在下面的示例中更新了片段标题:
ViewPager pager = /* get my ViewPager */;
// assume this actually has stuff in it
final ArrayList<String> titles = new ArrayList<String>();
FragmentManager fm = getSupportFragmentManager();
pager.setAdapter(new FragmentStatePagerAdapter(fm) {
public int getCount() {
return titles.size();
}
public Fragment getItem(int position) {
MyFragment fragment = new MyFragment();
fragment.setTitle(titles.get(position));
return fragment;
}
public int getItemPosition(Object item) {
MyFragment fragment = (MyFragment)item;
String title = fragment.getTitle();
int position = titles.indexOf(title);
if (position >= 0) {
return position;
} else {
return POSITION_NONE;
}
}
});
试试这个
在 Activity
的 onCreate 中显示 imageButton1 并隐藏 imageButton2
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scrolling);
imag1.setVisibility(View.VISIBLE);
imag2.setVisibility(View.GONE);
因此,当您的应用启动时,它将显示第一个 imageButton 并隐藏第二个 imageButton
现在当你在选项卡之间切换时
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if(position==0){
imag1.setVisibility(View.VISIBLE);
imag2.setVisibility(View.GONE);
}
else if(position==1){
imag1.setVisibility(View.GONE);
imag2.setVisibility(View.VISIBLE);
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
我有一个 HomeActivity,我在其中使用了 ViewPager。向右滑动时会出现 2 个片段 home1F 和 home2F。 HomeActivity 有一个顶部栏(由 Linerlayout 使用),其中有 2 个图像按钮。当 home1F 在屏幕中时,显示一个按钮(另一个不可见),当 home2F 在屏幕中时,显示另一个按钮,而第一个按钮不可见。 但是当我 运行 我首先发现的应用程序时,第二个按钮是可见的而不是第一个按钮(当有 home1F 时)。当我滑动到 home2F 时没有任何反应。当我向左滑动回到 home1F 时,仍然没有任何反应。
代码如下:
private class MyPagerAdapter extends FragmentPagerAdapter {
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int pos) {
switch(pos) {
case 0:
//imagebutton-1 visible
//imagebutton-2 invisible
return Home1F.newInstance("FirstFragment, Instance 1");
case 1:
//imagebutton-1 invisible
//imagebutton-2 visible
return Home2F.newInstance("SecondFragment, Instance 1");
default:
//imagebutton-1 visible
//imagebutton-2 invisible
return Home1F.newInstance("FirstFragment, Instance 1");
}}
@Override
public int getCount() {
return 2;
}
}
if you want to switch out the actual fragments that are being displayed, you need to avoid FragmentPagerAdapter and use FragmentStatePagerAdapter.
使用getItemPosition()
我们可以更新片段。在下面的示例中更新了片段标题:
ViewPager pager = /* get my ViewPager */;
// assume this actually has stuff in it
final ArrayList<String> titles = new ArrayList<String>();
FragmentManager fm = getSupportFragmentManager();
pager.setAdapter(new FragmentStatePagerAdapter(fm) {
public int getCount() {
return titles.size();
}
public Fragment getItem(int position) {
MyFragment fragment = new MyFragment();
fragment.setTitle(titles.get(position));
return fragment;
}
public int getItemPosition(Object item) {
MyFragment fragment = (MyFragment)item;
String title = fragment.getTitle();
int position = titles.indexOf(title);
if (position >= 0) {
return position;
} else {
return POSITION_NONE;
}
}
});
试试这个
在 Activity
的 onCreate 中显示 imageButton1 并隐藏 imageButton2@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scrolling);
imag1.setVisibility(View.VISIBLE);
imag2.setVisibility(View.GONE);
因此,当您的应用启动时,它将显示第一个 imageButton 并隐藏第二个 imageButton
现在当你在选项卡之间切换时
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if(position==0){
imag1.setVisibility(View.VISIBLE);
imag2.setVisibility(View.GONE);
}
else if(position==1){
imag1.setVisibility(View.GONE);
imag2.setVisibility(View.VISIBLE);
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});