2

私が達成したいこと:

  • ユーザーが押したときにリスト項目が強調表示される
  • ユーザーがそれを押すのをやめると、リスト項目:
    • 押す前に選択されていなかった場合は、強調表示されたままになります
    • 押す前に選択されていた場合は、ハイライトを失います
  • 長いクリックは、ユーザーが押すのをやめたのと同じように動作します (以前の状態に応じてアイテムの背景を変更します)。
  • 特定のアイテムを押さずにリストをスクロールすると、どのアイテムも強調表示されません

詳細:

  • 私が読んだことについては、リストセレクターと状態android:state_activatedを使用して動作を実現できると思いますが、この状態は API レベル 11 で導入されました。私が探しているソリューションは API レベル 10 で動作する必要があります
  • クリックに依存するソリューション(onItemClick、onClick ...)は機能しないと思います。これは、ユーザーがプレスを開始したときではなく、プレスを停止した後にクリックがトリガーされるためです(押された状態のように)。android:state_pressedを使用してアイテムのハイライトを変更すると永続的ではなく (プレスが終了すると元に戻ります)、android:state_pressedで変更してクリック時に永続的にすると、ちらつきが発生します
  • API レベル 10 でそれを実現するアプリの良い例はTasksです。リスト内の項目をクリックまたはロングクリックするだけで、目的の動作を確認できます

それで、誰かがすでにそれを解決しましたか?Tasks アプリがどのようにそれを行うかについて何か考えはありますか?

4

3 に答える 3

1

おそらく、行にOnTouchListenergetViewメソッド内で)を設定する必要がありViewます。そうすればMotionEvent、最初のタッチ(MotionEvent.ACTION_DOWNアクション)のが表示され、選択を設定できます。

    private OnTouchListener mTouchListener = new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                v.setBackgroundColor(Color.RED); // set the selection
            }
            // don't forget to store this new status so the adapter will see
            // it. Otherwise you'll have some problems when the list will be
            // scrolled.
            return false;
        }
    };
于 2012-12-20T05:34:52.417 に答える
0

私は最終的に、独自の list( PressListView) extendsを実装してその問題を解決しましたListViewPressListViewリストの項目が押されたときにユーザーに通知するコールバックがあります。

アイテムが押されたとき (これが最も難しい部分でした) を知ると、残っているのはアイテムの背景を適切に処理することだけです。これは、セレクターを使用して独自のアダプターで行うことができます。

これが完全に機能することを確認したい場合は、私のデモ プロジェクトをご覧ください。

アイテムを長押しして CAB を起動できます。CAB に入ると、タッチと方向パッド/トラックパッドの両方でアイテムの強調表示をテストできます。

私のソリューションは思い通りに機能しますが、アイテムの状態を変更するときは、タスクアプリのリストよりもまだ遅くなります。2 つの項目を非常に高速に選択しようとすると、ほとんどの場合、私の例では項目の 1 つが選択されませんが、Tasksでは選択されます。誰かがそれが何であるかを知っていれば、私は非常に感謝しています!

于 2013-01-14T20:36:07.803 に答える