需要从寻呼机适配器中识别当前视图片段

时间:2017-05-18 05:50:40

标签: android android-fragments adapter pager

我们必须知道当前片段是寻呼机适配器中的可见模式,但无法处理。

        File dir = new File(Environment.getExternalStorageDirectory(), filepath);
        if(!dir.exists()) {

            dir.mkdir();
        }
        filename = "O"+pref.getCurrentOdrerId()+".pdf";
        System.out.println("filename: "+filename);
        pdfFile = new File(dir.getAbsoluteFile()+"/"+filename);

        Uri uri;
        int currentapiVersion = android.os.Build.VERSION.SDK_INT;
        if (currentapiVersion >= Constants.ANDROID_NOUGAT) {
            //uri = Uri.parse(pdfFile.getAbsolutePath());
            uri = FileProvider.getUriForFile(getActivity(), BuildConfig.APPLICATION_ID + ".provider",
                    new File(pdfFile.getAbsolutePath()));
        }
        else{
            uri = Uri.fromFile(new File(pdfFile.getAbsolutePath()));
        }
        WebView webView = (WebView) v.findViewById(R.id.showInvoicePdf);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setDomStorageEnabled(true);
        webView.setWebViewClient(new MyBrowser());
        webView.loadUrl(uri.toString());//String.valueOf(new File(pdfFile.getAbsolutePath()))

这是我的代码无效。

2 个答案:

答案 0 :(得分:0)

ViewPager.OnPageChangeListener是正确的方法。正如您所注意到的那样,onPageSelected(int position)在页面居中之前不会被调用。因此,当页面正确居中时,它将为您提供当前可见的片段。

答案 1 :(得分:0)

有一些方法可以做到这一点。首先,您可以在视图寻呼机上设置页面更改侦听器:

  viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(final int i, final float v, final int i2) {
    }
    @Override
    public void onPageSelected(final int i) {
        // If you are user FragmentPagerAdapter below is the right way to get fragment
        Fragment fragment= getChildFragmentManager().findFragmentByTag("android:switcher:" + R.id.viewPager_card_exchanger + ":" + i);

        if(fragment!=null){
            // Do your stuff here 
        }
    }
    @Override
    public void onPageScrollStateChanged(final int i) {
    }
});

或者您可以覆盖片段方法,如下所示:

 @Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
        System.out.println("VISIBLE");
    } else {
        System.out.println("GONE");
    }
}