如何刷新为每个选项卡中的ViewPager? [英] How to refresh the ViewPager for every tab?

查看:172
本文介绍了如何刷新为每个选项卡中的ViewPager?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用ViewPager作为主要的布局和我使用的片段个人寻呼机的意见。该标签是操作栏的一部分。
我想刷新在我的动作条的刷新按钮当前选项卡。

我MainActivity.java

  @覆盖
  保护无效的onCreate(捆绑savedInstanceState){
      super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);
    viewPager =(ViewPager)findViewById(R.id.pager);
    动作条= getActionBar();
    mAdapter =新TabsPagerAdapter(getSupportFragmentManager());    viewPager.setAdapter(mAdapter);
    actionBar.setHomeButtonEnabled(假);
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);    //添加标签
    对于(字符串TAB_NAME:标签){
        actionBar.addTab(actionBar.newTab()的setText(TAB_NAME)
                .setTabListener(本));
    }    / **
     *上刷卡viewpager做出选择相应的标签
     * * /
    viewPager.setOnPageChangeListener(新ViewPager.OnPageChangeListener(){        @覆盖
        公共无效使用onPageSelected(INT位置){
            //上改变页面
            //使受人尊敬的选项卡中选择
            actionBar.setSelectedNavigationItem(位置);
            mAdapter.notifyDataSetChanged();
        }        @覆盖
        公共无效onPageScrolled(INT为arg0,ARG1浮球,诠释ARG2){
        }        @覆盖
        公共无效onPageScrollStateChanged(INT为arg0){
        }
    });
}
@覆盖
公共布尔onOptionsItemSelected(菜单项菜单项)
{
    开关(menu​​Item.getItemId()){
    案例R.id.action_refresh:         // code为刷新        返回true;    默认:
        this.finish();        返回super.onOptionsItemSelected(菜单项);
    }
    // startActivity(新意图(这一点,previousActivity.class));
}
@覆盖
公共布尔onCreateOptionsMenu(菜单菜单){
    MenuInflater吹气= getMenuInflater();
    inflater.inflate(R.menu.activity_actions,菜单);    返回super.onCreateOptionsMenu(菜单);
}@覆盖
公共无效onTabReselected(标签选项卡,FragmentTransaction英尺){
}@覆盖
公共无效onTabSelected(标签选项卡,FragmentTransaction英尺){
    //在选项卡中选择
    //秀推崇片段视图
    viewPager.setCurrentItem(tab.getPosition());
}@覆盖
公共无效onTabUnselected(标签选项卡,FragmentTransaction英尺){
}

这是我的一个选项卡
StartPage.java

  @覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
        捆绑savedInstanceState){    查看rootView = inflater.inflate(R.layout.startpage,集装箱,FALSE);
    返回rootView;
}@覆盖
公共无效onTabReselected(标签为arg0,ARG1 FragmentTransaction){
    // TODO自动生成方法存根}
@覆盖
公共无效onTabSelected(标签选项卡,FragmentTransaction英尺){
    // TODO自动生成方法存根}
@覆盖
公共无效onTabUnselected(标签选项卡,FragmentTransaction英尺){
    // TODO自动生成方法存根}


解决方案

一个办法是找到操作栏中选择的选项卡,将其转换为它的类型,并调用一个方法就可以了。

这就是你可能要避免依赖关系。

我preFER利用广播,此方案。注册在片段广播接收机onResume方法,在onPause注销了。然后让转播意向的刷新上下文和碎片将这样做。

这会让你来自世界各地刷新片段在应用程序中。即使清爽code在后台运行的服务结束。

更新:

您将有一些code这样任何你想要的(这个是的上下文):

  LocalBroadcastManager磅= LocalBroadcastManager.getInstance(本);
意图I =新意图(REFRESH_CONSTANT);
lbm.sendBroadcast(ⅰ);

然后在你的片段,你听这个广播:

 公共类MyFragment扩展片段{    MyReceiver  -  [R;    公共无效刷新(){
        //执行刷新
    }    公共无效的onPause(){
        LocalBroadcastManager.getInstance(mContext).unregisterReceiver(R);
    }    公共无效onResume(){
        R =新MyReceiver();
        LocalBroadcastManager.getInstance(mContext).registerReceiver(R,
            新的IntentFilter(REFRESH_CONSTANT));
    }    私有类MyReceiver扩展广播接收器{
        @覆盖
        公共无效的onReceive(上下文的背景下,意图意图){
            MyFragment.this.refresh();
        }
    }
}

I'm using ViewPager as a main layout and for individual pager views I use Fragments. The tabs are part of Action Bar. I wanna refresh the current tab with the refresh-button in my actionbar.

My MainActivity.java

@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) {
}

This is one of my Tabs 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

}

解决方案

One way is to find the selected tab in the action bar, cast it to its type, and call a method on it.

That is a dependency you might want to avoid.

I prefer to use broadcasts for this scenario. Register a broadcast receiver in the fragments onResume method, unregister it in onPause. Then let a context broadcast an intent for a refresh and the fragment will do that.

This will let you refresh the fragments from everywhere in your application. Even if the refreshing code ends up in a service running in the background.

Update:

You will have some code like this anywhere you want (this is s context):

LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
Intent i = new Intent(REFRESH_CONSTANT);
lbm.sendBroadcast(i);

Then in your fragment you listen for this broadcast:

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();
        }
    }
}

这篇关于如何刷新为每个选项卡中的ViewPager?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆