问题描述
我使用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(菜单项菜单项)
{
开关(menuItem.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 TabsStartPage.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?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!