Android 如何为每个选项卡刷新ViewPager?
我使用ViewPager作为主布局,对于单个页面视图,我使用片段。这些选项卡是操作栏的一部分。 我想用操作栏中的刷新按钮刷新当前选项卡 My MainActivity.javaAndroid 如何为每个选项卡刷新ViewPager?,android,tabs,android-viewpager,Android,Tabs,Android Viewpager,我使用ViewPager作为主布局,对于单个页面视图,我使用片段。这些选项卡是操作栏的一部分。 我想用操作栏中的刷新按钮刷新当前选项卡 My MainActivity.java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.pager);
actionBar = getActionBar();
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// Adding Tabs
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name)
.setTabListener(this));
}
/**
* on swiping the viewpager make respective tab selected
* */
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// on changing the page
// make respected tab selected
actionBar.setSelectedNavigationItem(position);
mAdapter.notifyDataSetChanged();
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem menuItem)
{
switch (menuItem.getItemId()) {
case R.id.action_refresh:
// code for the refresh
return true;
default:
this.finish();
return super.onOptionsItemSelected(menuItem);
}
//startActivity(new Intent(this,PreviousActivity.class));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_actions, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// on tab selected
// show respected fragment view
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}
这是我的一个标签
StartPage.java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.startpage, container, false);
return rootView;
}
@Override
public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
// TODO Auto-generated method stub
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
一种方法是在操作栏中找到所选选项卡,将其强制转换为其类型,然后对其调用方法 这是您可能希望避免的依赖关系 我更喜欢在这个场景中使用广播。在fragments onResume方法中注册广播接收器,在onPause中取消注册。然后让上下文广播刷新的意图,片段就会这样做 这将允许您刷新应用程序中任何地方的片段。即使刷新代码最终出现在后台运行的服务中 更新: 您可以在任何地方使用类似的代码(
this
is's context):
然后在您的片段中收听此广播:
public class MyFragment extends Fragment {
MyReceiver r;
public void refresh() {
// Do the refresh
}
public void onPause() {
LocalBroadcastManager.getInstance(mContext).unregisterReceiver(r);
}
public void onResume() {
r = new MyReceiver ();
LocalBroadcastManager.getInstance(mContext).registerReceiver(r,
new IntentFilter(REFRESH_CONSTANT));
}
private class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
MyFragment.this.refresh();
}
}
}
public class MyFragment extends Fragment {
MyReceiver r;
public void refresh() {
// Do the refresh
}
public void onPause() {
LocalBroadcastManager.getInstance(mContext).unregisterReceiver(r);
}
public void onResume() {
r = new MyReceiver ();
LocalBroadcastManager.getInstance(mContext).registerReceiver(r,
new IntentFilter(REFRESH_CONSTANT));
}
private class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
MyFragment.this.refresh();
}
}
}