ギャラリー/アダプタービューチャイルドドロー可能状態
-
27-09-2019 - |
質問
各アイテムに対応するビューが自明で、テキストと複数のボタンで構成されているギャラリービューを使用しています。
クリックしてギャラリービュー(ボタンの1つではない場所)をドラッグすると、ボタンの描画可能な状態が押し付けられ、すべてのボタンが現在押されているかのように表示されます。さらに、選択された状態でも同じ動作が発生します(たとえば、子のテキストのすべてのテキストが色を変更します)。
私はこの動作を防止しようとしており、Android:DuplicateParentState XML属性とSetDuplicateParentStateEnabledプロパティを見つけました。これは私がやろうとしていることを達成する必要があるようですが、効果がないようです。
何か案は?
解決 2
DuplicateParentStateプロパティがどこにあるかはわかりませんが、ソースを突破すると、選択された状態と押された状態が考慮されないことが示されています。カスタムビュークラスを作成し、DispatchSetseTedとDispatchSetpondメソッドをオーバーライドします。
他のヒント
少し後半になるかもしれませんが、最近自分でこの問題に遭遇したので、修正があります。
SelectedとDispatchSetpessed DispatchSetsetSetsedは、実際にオーバーライドする必要がある方法がギャラリー内でプライベートであるため、ここでは本当に役立ちません。
解決策は、子ビューの周りに追加のレイアウト(LinearLayoutのサブクラスを使用した)を追加することです。これにより、ギャラリーが子供たちに押し付けられた状態を強制することを防ぎ、それらの子供を直接活性化することを可能にし、イベントが上向きに伝播するのを止めないようにします。
ギャラリーから拡張して独自のカスタムバージョンを作成する場合は、単に実行できます。
@Override
public boolean onDown(MotionEvent e) {
// Ignore onDown events in order to avoid having every child's state set to 'pressed'
return true;
}
これにより、カスタムギャラリーの子供たちがクリックイベントを適切に受け取り、意図したとおりにスワイプ /フリングの作品を適切に受け取ることができます。