2

次の動作でウィジェットを構築しようとしています: ウィジェットが表示されている場合にのみ更新します。それについてもう少し説明させてください。スマートフォンには、1 つ、2 つ、3 つの 3 つのホーム画面があるとします。ウィジェットは画面 3 に配置され、スマートフォンをアクティブにすると画面 1 で開始されます。そのため、ユーザーが画面を画面 3 に変更した場合にのみウィジェットを更新したいので、このイベントに反応したいと考えています。Androidでこれを行う機会はありますか?

私の知る限り、残念ながらこれを行う方法はありません。可視性の変更などについて通知を受けるための変更はありません。Google で何時間も検索しますが、興味深いものは見つかりません。誰か他の情報を持っていますか?ヒントをいただければ幸いです。あなたが私を助けてくれることを願っています。

4

1 に答える 1

0

dispatchTouchEvent で試すことができます (チェックするビューの x、y 座標を取得できることを願っています)。

手順 :

  1. ビューを含むビューを containerView にします。
  2. ビューの ontouchlistener を設定します。
  3. 画面が変わったとき、またはビューが表示されているかどうかを確認する必要があるときに、ビューの座標を含む MotionEvent を使用して dispatchTouchEvent 呼び出しを開始します。
  4. ビューがその座標領域にある場合、ビューのタッチ イベントが呼び出されます。

例えば ​​:

    containerView = LayoutInflater.from(this).inflate(
            R.layout.activity_main, null);
    setContentView(containerView);
            yourView = containerView.findViewById(R.id.yourView);
            yourView .setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            Toast.makeText(MainActivity.this, "View visible",
                    Toast.LENGTH_SHORT).show();
            return false;
        }
    });

確認する必要がある場合は、次のコードを実行します。

public void doCheck() {
    long downTime = SystemClock.uptimeMillis();
    long eventTime = SystemClock.uptimeMillis() + 100;
    float x = 100f; //yourView x coordinate
    float y = 100f; //yourView y coordinate
    int metaState = 0;
    MotionEvent motionEvent = MotionEvent.obtain(downTime, eventTime,
            MotionEvent.ACTION_DOWN, x, y, metaState);
    containerView.dispatchTouchEvent(motionEvent);
}

これが役立つことを願っています。

于 2013-05-07T12:46:06.357 に答える