java - 如何使用 viewpager 启动新 Activity 或刷新当前 Activity
问题描述
我有片段中的viewpager。我正在寻找开始一项新活动或使用其上的选项卡刷新当前活动
现在,我正在使用它来打开名为“星期日”和“星期一”的片段,但我想添加另一个选项卡,当用户选择此选项卡时,要么将当前活动刷新为首次打开应用程序时的相同状态,要么打开新活动
这是我的代码
public class MainActivity extends AppCompatActivity {
//RSS link
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar myToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(myToolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new sectionB(), "SEC B");
viewPager.setAdapter(adapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
//here yourDesiredPositionNumber is a int...like 0,1,2,3..according you
if (tab.getPosition() == 0) {
Intent i1 = new Intent(MainActivity.this, SagarActivity.class);
startActivity(i1);
//here you can do your refresh of start new activity
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
}
解决方案
刷新
如果要刷新整个活动,可以调用recreate()
活动方法
在你的情况下,你在一个片段中,所以你需要先获得活动,这样你才能做到getActivity().recreate()
开始新活动
打开一个新的活动,你可以使用startActivity()
我是你的情况,你可以这样做
Intent intent = new Intent(getActivity(),activity_you_want_to_start.class);
startActivity(intent);
还记得一件事,总是让用户 getActivity() 不返回 null
现在在你的情况下
你需要像这样在你的 TabLayout 上设置监听器然后调用上面的方法
TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tabs_dayscount);
tabLayout.setupWithViewPager(viewPager);
//setting listener on tabLAyout
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
//here yourDesiredPositionNumber is a int...like 0,1,2,3..according you
if (tab.getPosition() == yourDesiredPositionNumber) {
//here you can do your refresh of start new activity
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
另一种方式是
您也可以像这样在 ViewPager 上设置监听器
TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tabs_dayscount);
tabLayout.setupWithViewPager(viewPager);
viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
//here yourDesiredPositionNumber is a int...like 0,1,2,3..according you
if(position==yourDesiredPositionNumber){
//here you can do your refresh of start new activity
}
super.onPageSelected(position);
}
});
推荐阅读
- c++ - 带有 VIM 环绕插件的 C++ 块
- google-apps-script - 正则表达式中的 Google 表格活动列引用
- cypher - popoto.js 在不选择属性的情况下查询具有相同关系的所有标签
- angular - 出现在页面外的角垫菜单
- python - 加速 Pandas 的 findall 日期语法分析
- java - 我们可以在我们的应用程序中播放我们的 YouTube 频道视频吗?
- excel - Power Query:在列中搜索关键字列表并仅返回具有至少一个匹配项的行的功能
- java - 像MathPow这样的Java方法,在效率上具有迭代和递归的解决方案-作业
- python - Python & Redis - 从 Redis 问题中设置/读取值的 Flask API
- c# - txt文件打不开