2011-07-15 19 views
0

私はテキストアイテムを持つギャラリーを持っています。選択した項目をUIで変更するか、setSelection(position)を使用してプログラムで変更することができます。しかし、このメソッドを呼び出すと、項目の背景が選択状態に変わらないことがあります。 setSelectionによって呼び出された項目がすでに画面に描画されている場合、その背景は更新されないことに気付きました。ギャラリーアイテムの背景がsetSelectionで変更されていません

ここにコードがあります。どんな助けも歓迎です。

public class Test3 extends Activity { 

    private static String[] items = {"0", "1", "2", "3", "4", "5"}; 

    public void onCreate (Bundle savedInstanceState) { 
    super.onCreate (savedInstanceState); 
    LinearLayout layout = new LinearLayout (this); 
    layout.setOrientation (LinearLayout.VERTICAL); 
    setContentView (layout); 
    final Gallery gallery = new Gallery (this); 
    layout.addView (gallery); 
    gallery.setSpacing (0); 
    gallery.setAdapter (new Adapter (this)); 
    gallery.setSelection (0); 
    ListView list = new ListView (this); 
    layout.addView (list); 
    list.setAdapter (new ArrayAdapter <String> (this, 
    android.R.layout.simple_list_item_1, items)); 
    list.setOnItemClickListener (new OnItemClickListener() { 
     public void onItemClick (AdapterView <?> parent, View view, int position, 
     long id) 
     { 
     gallery.setSelection (position); 
     } 
    }); 
    } 

    private class Adapter extends ArrayAdapter <String> { 

    public Adapter (Context context) { 
     super (context, android.R.layout.simple_gallery_item, items); 
    } 

    public View getView (int position, View convertView, final ViewGroup parent) 
    { 
     TextView view = new TextView (getContext()); 
     view.setText (getItem (position)); 
     view.setBackgroundResource (R.drawable.gallery_background); 
     view.setGravity (Gravity.CENTER); 
     view.setLayoutParams (new Gallery.LayoutParams (Test3.this 
     .getWindowManager().getDefaultDisplay().getWidth()/3, 
     Gallery.LayoutParams.FILL_PARENT)); 
     return view; 
    } 
    } 
} 

gallery_background.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true" android:drawable="@drawable/highlight_selected" /> 
    <item android:state_checked="true" android:drawable="@drawable/highlight_selected" /> 
    <item android:state_focused="true" android:drawable="@drawable/highlight_selected" /> 
    <item android:state_pressed="true" android:drawable="@drawable/highlight_pressed" /> 
    <item android:drawable="@drawable/highlight_disabled" /> 
</selector> 
+0

清潔な溶液にはまだ開いています。 – Patrick

答えて

1

invalidatingギャラリーやnotifyDataSetChangedギャラリーアダプタを試してみてください。

+0

私はinvalidateとrefreshDrawableStateを運行なしで試みました...しかし、 '((ArrayAdapter )gallery.getAdapter())。notifyDataSetChanged()'で動作します。私はこの答えを役に立つとマークしますが、それを受け入れる前にちょっと待っています。私にハックのように見えるからです。 – Patrick

+0

本当にハックではありません。 notifyDataSetChangedは、ビューアダプタに何か(非特定)が変更され、おそらくそれが自動的に更新されるべきであることをビューに伝えます。アダプター項目を追加または削除した場合は、ビューを更新する方法です。 – AedonEtLIRA

+0

はい、この場合、私は項目を変更しませんでした。 – Patrick

関連する問題