web-dev-qa-db-ja.com

タブ間のスワイプを無効にします

2つのFragmentsでスライディングタブを設定します。それぞれFragmentにはButtonに移動するWebViewがあります。これに関する問題は、WebViewButtonがクリックされたときにスライドタブがアクティブになり、ユーザーがWebView内をナビゲートしようとすると、他のタブにスワイプすることになります。クリックの方法でタブのスワイプ機能を無効にする方法はありますか?どんな助けでも大歓迎です!

ここにコード:

public class MyWebViewClass extends Fragment {

private WebView mWebView;
private Button mButton;

public MyWebViewClass() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_webview, container, false);

    mWebView = (WebView) view.findViewById(R.id.WebView);

    mButton = (Button) view.findViewById(R.id.Button1);
    mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mWebView.setVisibility(View.VISIBLE);
            mButton.setVisibility(View.GONE);
            mWebView.getSettings().setJavaScriptEnabled(true);
            mWebView.loadUrl("www.google.com");
        }
    });

    return view;
}
36

この回答は、実際にタブを実装するために使用しているライブラリが何であれ、タブのない通常のViewPagerであっても、ViewPagerに適用できます。

neokree/MaterialTabs を使用しているライブラリは、スワイプ効果を担当するViewPagerでサポートされており、独自のカスタムViewPagerを提供することで無効にできます。

ページングが常に無効になっているViewPager

_import Android.content.Context;
import Android.support.v4.view.ViewPager;
import Android.util.AttributeSet;
import Android.view.MotionEvent;

public class CustomViewPager extends ViewPager {

    public CustomViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return false;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        return false;
    }
}
_

[〜#〜] or [〜#〜]いつでもオンまたはオフに切り替え可能なページングを備えたViewPager。

_import Android.content.Context;
import Android.support.v4.view.ViewPager;
import Android.util.AttributeSet;
import Android.view.MotionEvent;

public class CustomViewPager extends ViewPager {

    private boolean enabled;

    public CustomViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.enabled = true;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return enabled && super.onTouchEvent(event);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        return enabled && super.onInterceptTouchEvent(event);
    }

    public void setPagingEnabled(boolean enabled) {
        this.enabled = enabled;
    }

    public boolean isPagingEnabled() {
        return enabled;
    }
}
_

このクラスは、スワイプ対応のViewPagerを提供します。viewPager.setPagingEnabled(false);でオフにできます

もちろん、元のレイアウトではなく、新しいカスタムViewPagerにXMLレイアウトを変更する必要があります。

_<Android.support.v4.view.ViewPager 
   ...
   />
_

_<my.package.CustomViewPager 
   ...
   />
_
74
Ahmed Hegazy

最も簡単な方法は、setOnTouchListenerに対してtrueを返し、ViewPagerを返すことです。

元の答え: https://stackoverflow.com/a/13392198/429381

2
Reza Nazeri