确定显示的片段

时间:2013-06-05 17:41:11

标签: java android android-fragments android-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);
        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);
    }

MainActivity

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

2 个答案:

答案 0 :(得分:0)

我不确定你的子类是什么适配器,但为什么不覆盖getView()回调来为你的活动设置一个类变量?然后你可以在每次想知道哪个片段显示时检查变量的值。

@Override
public Fragment getItem(int position) {
    MainActivity.setCurrentlyShownFragment(position);
    return SomeFragment.newInstance(position);
}

这是我所知道的最简单的方式。

答案 1 :(得分:0)

确定是否显示Fragment并不难。在Fragment代码中,只需覆盖setUserVisibleHint()即可。这需要一个布尔值,如果片段UI可见则为true,如果不可见则为false。

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) { 
   //Do something
} else {  
   //Do something else
}

}

然后,您只需在条件陈述的相应部分中包含您在可见案例和不可见案例中要执行的操作。根据您尝试执行的操作,可能需要使用Interface将数据传递到包含的片段活动,以便您可以访问其他片段或执行某些基于活动的功能。