小编mik*_*ell的帖子

尽管滚动,如何使 ProgressBar 保持在屏幕中央

我在 ScrollView 中有一个 ProgressBar,尽管用户向下或向上滚动,但我希望它保持垂直居中。但是,我不确定如何实现这一点。

这是我拥有的代码,虽然很简单。我有一个不确定的 ProgressBar:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/ocr_scroll_view"
android:layout_width="match_parent"
android:layout_height="fill_parent">

    <RelativeLayout android:id="@+id/image_holder"
    android:layout_gravity="end"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

        <ImageView android:id="@+id/image"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

        <ProgressBar android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleLarge"
        android:visibility="gone"
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
Run Code Online (Sandbox Code Playgroud)

我这样称呼它:

    spinningProgressBar = (ProgressBar)findViewById(R.id.progressBar1);
    spinningProgressBar.setIndeterminate(true);
    spinningProgressBar.setVisibility(View.GONE);
Run Code Online (Sandbox Code Playgroud)

在适当的时间设置其可见性。

非常感谢所有建议。

android vertical-alignment

2
推荐指数
2
解决办法
3930
查看次数

React/Redux、useEffect/useSelector、过时闭包和事件监听器

我有一个 React/Redux 类组件,我正在将其转换为功能组件。

\n

以前,它有一个componentDidMount回调,为从应用程序中其他地方调度的自定义事件添加事件侦听器。这正在被替换useEffect。事件侦听器在触发时调用该组件中其他位置的方法。

\n

此方法执行的操作取决于从选择器检索的值。最初,我传递了useEffect一个空的依赖项数组,因此它只会在挂载上添加事件侦听器。然而,显然这会导致选择器值周围的闭包过时。一个可行的解决方案是将选择器作为依赖项 \xe2\x80\x93 传递给它,但是,这会导致每次选择器的值更改时都会删除/重新添加侦听器,这不太好。

\n

我正在尝试考虑一种解决方案,该解决方案仅添加一次事件侦听器,同时允许被调用的方法访问选择器的当前值。

\n

示例代码:

\n
const currentValue = useSelector(state => getValue(state));\n\nuseEffect(() => {\n  document.addEventListener('my.custom.event', handleEvent);\n\n  return(() => document.removeEventListener('my.custom.event', handleEvent));\n}, []);\n\nconst handleEvent = () => {\n  console.log(currentValue)\n}\n
Run Code Online (Sandbox Code Playgroud)\n

事实上,这会创建一个陈旧的闭包currentValue,以便在事件触发时,记录的值不一定是最新的。

\n

更改[][currentValue]inuseEffect会产生预期的行为,但会在每次更改 时删除/重新添加事件侦听器currentValue

\n

由于这不是组件的状态值,因此无法选择使用回调(例如console.log(currentValue => console.log(currentValue))访问最新值)。我还尝试使用 usinguseRef来保留该值,但我相信每次选择器的值发生变化时我都需要某种方法来更新 ref 值,这并不是一个解决方案。

\n

在实际组件中, 的值currentValue在 Redux 中被其他组件修改,因此将其更改为状态值也不太可行。

\n

我在想:

\n
    \n
  • 是否有办法在被调用的方法中刷新选择器的值;
  • \n …

javascript reactjs redux react-hooks use-effect

2
推荐指数
1
解决办法
2187
查看次数