gpt4 book ai didi

android - 使用 fakedrag 锁定 viewpager

转载 作者:行者123 更新时间:2023-11-29 14:54:29 32 4
gpt4 key购买 nike

我正在尝试制作一个具有可编辑文本的 viewpager,但我不希望 viewpager 在编辑文本框时滚动。我试图通过使用 viewpager 的 beginFakeDrag 和 endFakeDrag 函数来禁用滚动,这会导致 viewpager 忽略所有触摸事件。出于某种原因,如果您调用 beginFakeDrag,然后调用 endFakeDrap,它可以正常工作,但分开时会抛出以下错误:

03-08 17:54:00.511: E/AndroidRuntime(31362): FATAL EXCEPTION: main
03-08 17:54:00.511: E/AndroidRuntime(31362): java.lang.NullPointerException
03-08 17:54:00.511: E/AndroidRuntime(31362): at android.support.v4.view.ViewPager.endFakeDrag(ViewPager.java:1683)
03-08 17:54:00.511: E/AndroidRuntime(31362): at gtg.gis.RequestActivity$2.onFocusChange(RequestActivity.java:115)
03-08 17:54:00.511: E/AndroidRuntime(31362): at android.view.View.onFocusChanged(View.java:2742)
03-08 17:54:00.511: E/AndroidRuntime(31362): at android.widget.TextView.onFocusChanged(TextView.java:7080)
03-08 17:54:00.511: E/AndroidRuntime(31362): at android.view.View.clearFocus(View.java:2639)
03-08 17:54:00.511: E/AndroidRuntime(31362): at android.view.ViewGroup.clearFocus(ViewGroup.java:522)
03-08 17:54:00.511: E/AndroidRuntime(31362): at android.view.View.setFlags(View.java:4645)
03-08 17:54:00.511: E/AndroidRuntime(31362): at android.view.View.setVisibility(View.java:3116)
03-08 17:54:00.511: E/AndroidRuntime(31362): at gtg.gis.RequestActivity$1.onClick(RequestActivity.java:95)
03-08 17:54:00.511: E/AndroidRuntime(31362): at android.view.View.performClick(View.java:2485)
03-08 17:54:00.511: E/AndroidRuntime(31362): at android.view.View$PerformClick.run(View.java:9089)
03-08 17:54:00.511: E/AndroidRuntime(31362): at android.os.Handler.handleCallback(Handler.java:587)
03-08 17:54:00.511: E/AndroidRuntime(31362): at android.os.Handler.dispatchMessage(Handler.java:92)
03-08 17:54:00.511: E/AndroidRuntime(31362): at android.os.Looper.loop(Looper.java:130)
03-08 17:54:00.511: E/AndroidRuntime(31362): at android.app.ActivityThread.main(ActivityThread.java:3806)
03-08 17:54:00.511: E/AndroidRuntime(31362): at java.lang.reflect.Method.invokeNative(Native Method)
03-08 17:54:00.511: E/AndroidRuntime(31362): at java.lang.reflect.Method.invoke(Method.java:507)
03-08 17:54:00.511: E/AndroidRuntime(31362): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-08 17:54:00.511: E/AndroidRuntime(31362): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-08 17:54:00.511: E/AndroidRuntime(31362): at dalvik.system.NativeStart.main(Native Method)

这是我的代码。

        commentBox.setOnFocusChangeListener(new EditText.OnFocusChangeListener()
{

public void onFocusChange(View v, boolean hasFocus)
{
if (hasFocus)
{
InputMethodManager mgr = (InputMethodManager) getContext().getSystemService(
Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(v, InputMethodManager.SHOW_IMPLICIT);
_viewPager.beginFakeDrag();
return;
}

_viewPager.endFakeDrag();
InputMethodManager mgr = (InputMethodManager) getContext().getSystemService(
Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
});

最佳答案

请查看我对另一个关于禁用 ViewPager 滑动的问题的回答:How do disable paging by swiping with finger in ViewPager but still be able to swipe programmatically?

我只是将它增强为一个 bool 值:

private boolean mDisablePaging;

如果您需要为该 bool 值添加一个 getter/setter。

然后增强onInterceptTouchEvent:

@Override
public boolean onInterceptTouchEvent(MotionEvent arg0) {
// Don't allow swiping to switch between pages if we disabled it
if (mDisablePaging) {
return false;
}

// Otherwise, do the normal behavior
return super.onInterceptTouchEvent(arg0);
}

然后当您检测到用户正在编辑文本框时,将 mDisablePaging 设置为 true。

关于android - 使用 fakedrag 锁定 viewpager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9626299/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com