有没有办法为我的MainActivity中的操作栏创建我的菜单项,其中创建了我的ViewPager,以便我只创建一次我的webview项目(后退,前进和刷新按钮)。然后在我的onOptions ....然后指定菜单项以便能够处理我的webview。
我的ViewPager中的所有片段都是webviews,我只想要3个常量的Actionbar项来控制正在显示的webview。每次我的viewpager加载另一个片段时,不要重新创建它们。任何想法???
public class Fragment1 extends SherlockFragment {
WebView web;
static ProgressBar progressBar;
@Override
public View onCreateView(LayoutInflater inf, ViewGroup grp, Bundle icicle) {
View v = inf.inflate(R.layout.activity_main, grp, false);
web = (WebView) v.findViewById(R.id.webView);
progressBar = (ProgressBar) v.findViewById(R.id.progressBar1);
//Now i know that i need this to use MENU ITEMS in this fragment
setHasOptionsMenu(true);
//
return v;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
web.setWebViewClient(new SpecialWebView(progressBar));
web.setWebChromeClient(new SpecialWebChromeClient(progressBar));
// Progress Bar - End
WebSettings websettings = web.getSettings();
websettings.setBuiltInZoomControls(false);
web.setBackgroundColor(Color.parseColor("#f2f2f2"));
websettings.setUseWideViewPort(true);
websettings.setJavaScriptEnabled(true);
websettings.setAllowFileAccess(true);
websettings.setDomStorageEnabled(true);
websettings.setLoadWithOverviewMode(true);
websettings.setSavePassword(true);
web.loadUrl("http://www.google.com");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater Inflater = getSupportMenuInflater();
Inflater.inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem Item) {
final int current = ((ViewPager) mFragments).getCurrentItem();
String currentId = current == 0 ? FRAGMENT1: (current == 1 ? FRAGMENT2: FRAGMENT3);
//WebView web = (WebView) findViewById(currentId);
switch (Item.getItemId()) {
case R.id.menu_back:
web.goBack();
return true;
case R.id.menu_forward:
web.goForward();
return true;
case R.id.menu_refresh:
web.reload();
return true;
}
return super.onOptionsItemSelected(Item);
}
public class MainActivity extends SherlockFragmentActivity {
private ViewPager mPager;
private TitlePageIndicator mIndicator;
private MainPagerAdapter mAdapter;
private List<Fragment> mFragments;
private static final String FRAGMENT1 = Fragment1.class.getName();
private static final String FRAGMENT2 = Fragment2.class.getName();
private static final String FRAGMENT3 = SupportFragment.class.getName();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.a_main);
// add fragments
mFragments = new ArrayList<Fragment>();
mFragments.add(Fragment.instantiate(this, FRAGMENT1));
mFragments.add(Fragment.instantiate(this, FRAGMENT2));
mFragments.add(Fragment.instantiate(this, FRAGMENT3));
// adapter
mAdapter = new MainPagerAdapter(getSupportFragmentManager(), mFragments);
// pager
mPager = (ViewPager) findViewById(R.id.view_pager);
mPager.setOffscreenPageLimit(3);
mPager.setAdapter(mAdapter);
// indicator
mIndicator = (TitlePageIndicator) findViewById(R.id.title_indicator);
mIndicator.setViewPager(mPager);
}
答案 0 :(得分:0)
您需要做的是创建一个主布局xml文件,并在其中放置“静态”按钮。然后在您想要拥有ViewPager的区域中,您只需删除ViewPager。 (取决于您的布局,按钮可以在ViewPager的上方/下方/上方/旁边)然后在代码中,您可以通过按钮 (如果)传递引用(可能的弱引用,具体取决于您的需要) 片段需要了解它们。
我读到这个的另一种方式(我不清楚你想要什么)你可以简单地为活动创建一个选项菜单,然后当选择选项时,只需在活动或活动片段中调用正确的方法。您可以按implements OnPageChangeListener
我不确定你想要什么,但很可能。
答案 1 :(得分:0)
只需将您的onCreateOptionsMenu()
和onOptionsItemSelected()
实施从片段移动到活动。
在onOptionsItemSelected()
中获取对当前活动片段的WebView
的引用,例如通过向片段添加getWebView()
方法。
答案 2 :(得分:0)
您需要onPageChangeListener:
http://developer.android.com/reference/android/support/v4/view/ViewPager.OnPageChangeListener.html
保持对当前所选片段的引用,然后根据位置将参考更改为onPageChangeListener.onPageSelected()中的活动片段。
从那以后,获取对片段中小部件的引用应该不会太难。正如cketti所提到的,你必须将onOptionsItemSelected()移动到活动。