我有一个简单的活动,FragmentPagerAdapter
在Fragments
中显示了一些图表。我可以通过点击ActionBar
中的标签或在其中一侧滑动来浏览它们。这就是Fragment
的样子:
public static class ChartFragment extends Fragment {
private static final String ARG_SECTION_NUMBER = "section_number";
private int section;
/**
* Returns a new instance of this fragment for the given section number.
*/
public static ChartFragment newInstance(int sectionNumber) {
ChartFragment fragment = new ChartFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
public ChartFragment() {
// enable menu for fragment
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
int arg = getArguments().getInt(ARG_SECTION_NUMBER);
section = arg;
return generateChart(arg);
}
private View generateChart() {
// generate the chart
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// handle item selection
switch (item.getItemId()) {
case R.id.action_button:
Log.e(TAG, "Section: " + section);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
(供您参考:代码示例基于此内置于ADT中的代码示例)
我已为ActionBar
启用了每个片段的菜单,并在onOptionsItemSelected
挂钩中处理了点击。在ActionBar
中手动选择标签时,一切正常,但在浏览片段并在导航到ActionBar
后不久点击action_button
按钮Fragment
时,显示先前显示的Fragment
!
我该怎么做才能使这种行为成为正常的#34;什么时候刷?
答案 0 :(得分:0)
在进行滑动时,最后一个完全显示的片段处理onOptionsItemSelected
钩子。为了避免用户单击错误片段的按钮,我只是在转换时阻止按钮单击触发的操作。
因此我使用这个监听器:
mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrollStateChanged(int arg0) {
if (arg0 == 0) {
isScrolling = false;
}
else {
isScrolling = true;
}
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});
第二种方法:
跟踪所有Fragment
个实例并处理活动中的挂钩。