4

カスタムギャラリーに接続されたLinearLayoutの子(それぞれImageViewとTextView)を持つ拡張BaseAdapterがあります。

setSelection(position)アクティビティを最初に起動するときに、ImageViewにセレクターを「選択された」画像に変更させるために呼び出したいと思います。これは、ギャラリーをフリングすると、その後に選択した子で機能しますが、アプリを初めて起動したときは機能しません。

私のセレクター:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" 
    android:drawable="@drawable/home_image_select" /> 
<item android:state_selected="false" 
    android:drawable="@drawable/home_image" /> 
</selector>

私の最初の推測は、setSelection()を呼び出した後、アダプターでnotifyDataSetChanged()を呼び出すことでした。これは、次のように試みました。

((CustomAdapter) gallery.getAdapter()).notifyDataSetChanged();

それは何もしませんでした。また、これを行うために、GalleryクラスのsetSelection()をオーバーライドしてみました。

View v = this.getAdapter().getView(position, null, this);       
((ImageView) v.findViewById(R.id.gallery_image)).setSelected(true);

それもうまくいきません。私が欠けている、または試すことができるものはありますか?

4

2 に答える 2

0

GalleryのsetSelection()を上書きすることで、自分の問題の解決策を見つけました(結局は機能しました)。

 @Override
public void setSelection(int position) {
    super.setSelection(position);

    View v = this.getAdapter().getView(position, null, this);
    v.setFocusable(true);
    v.requestFocus();
}
于 2012-02-18T01:03:12.413 に答える
0

呼び出すべきではないと思いますnotifyDataSetChanged()。基になるデータセットが変更されると、選択状態がクリアされます。

電話するだけsetSelection(position)で、私のアプリで動作します。

于 2012-04-11T06:36:59.847 に答える