gpt4 book ai didi

android - 如何为每个选项卡刷新 ViewPager?

转载 作者:行者123 更新时间:2023-11-29 21:19:08 24 4
gpt4 key购买 nike

我使用 ViewPager 作为主要布局,对于单个寻呼机 View ,我使用 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) {
}

这是我的一个标签起始页.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 中取消注册。然后让上下文广播刷新 Intent , fragment 将执行此操作。

这将使您可以从应用程序的任何位置刷新 fragment 。即使刷新代码最终出现在后台运行的服务中。

更新:

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

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

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

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

关于android - 如何为每个选项卡刷新 ViewPager?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20955415/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com