【问题标题】:How to refresh the ViewPager for every tab?如何为每个选项卡刷新 ViewPager?
【发布时间】:2014-01-06 17:14:47
【问题描述】:

我使用 ViewPager 作为主要布局,对于单个寻呼机视图,我使用 Fragments。这些选项卡是操作栏的一部分。 我想使用操作栏中的刷新按钮刷新当前选项卡。

我的 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) {
}

这是我的标签之一 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

}

【问题讨论】:

    标签: android tabs android-viewpager


    【解决方案1】:

    一种方法是在操作栏中找到选定的选项卡,将其转换为其类型,然后对其调用方法。

    这是您可能希望避免的依赖项。

    我更喜欢在这种情况下使用广播。在片段的 onResume 方法中注册广播接收器,在 onPause 中取消注册。然后让上下文广播一个刷新意图,片段就会这样做。

    这将让您从应用程序的任何地方刷新片段。即使刷新代码最终在后台运行的服务中。

    更新:

    你会在任何你想要的地方有一些这样的代码(this 是上下文):

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

    然后在您的片段中收听此广播:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-05
      • 2012-05-26
      • 1970-01-01
      相关资源
      最近更新 更多