2012-01-19 9 views
0

私は1つのgridviewを作成し、カスタムアダプタを使用しました。グリッドビュー内に2つの画像を追加しました。もう1つは画像で、もう1つはクローズボタンのように見えます(これはすべてのグリッドビュー項目で同じです)。閉じるボタンは最初は非表示に設定されていますが、私は自分のアクティビティに別のボタンがあります。私はこのボタンをクリックすると、グリッドビューのすべての要素に閉じるボタンを設定したいと思いますが、それには何も起こりません。以下 は私のコードです:gridview要素の可視性を設定する

  @Override 
     public View getView(int position, View convertView, ViewGroup parent) 
     { 

      View MyView = convertView; 
      final int pos=position; 

      LayoutInflater li = (LayoutInflater) MyContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      MyView = li.inflate(R.layout.favor_item, null); 


      ImageView iv = (ImageView) MyView.findViewById(R.id.favor_item_image); 
      iv.setImageResource(favorSites.get(pos)); 

      deleteFavorImage = (ImageView) MyView.findViewById(R.id.favDelete); 
      deleteFavorImage.setImageResource(R.drawable.dubtndelete); 

      return MyView; 
     } 

そして最後に、これは私のXMLファイルのコードです:

ImageView deleteFavorImage; 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.browser); 
    ..... 

    GridView favorGrid = (GridView) findViewById(R.id.favorGrid); 
    favorGrid.setAdapter(adapter); 
    ..... 
    View customView = findViewById(R.id.costumButton); 
    customView.setOnClickListener(this); 

@Override 
public void onClick(View v) { 

    switch(v.getId()){ 

    case R.id.costumButton: 
     deleteFavorImage.setVisibility(View.VISIBLE); 
    break; 
    ..... 
    } 

これは私のイメージアダプターコードです

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="85dp" 
android:layout_height="85dp" 
android:orientation="vertical" 
android:background="@drawable/dufavframe" > 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="75dp" 
    android:layout_height="75dp" 
    android:orientation="vertical" 
    android:layout_centerInParent="true" 
    android:gravity="center"> 

    <com.test.favorsites.AspectRatioImageView android:layout_centerHorizontal="true" 
     android:id="@+id/favor_item_image" 
     android:layout_alignParentTop="true" android:layout_height="wrap_content" 
     android:layout_width="match_parent" android:adjustViewBounds="true"/> 
    </LinearLayout> 


    <ImageView android:id="@+id/favDelete" android:visibility="invisible" 
    android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_marginTop="-3dp" 
    android:layout_alignParentRight="true" android:layout_marginRight="-5dp"> 
    </ImageView> 



    </RelativeLayout> 
+0

下に置くクラスでグローバルにint positionSelected = 0;

そして、GridViewのクリックのリスナーに

gridView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { positionSelected=position; ((BaseAdapter)gridView.getAdapter()).notifyDataSetChanged(); } } }); 

そしてgetViewメソッドメソッド内の定義は、あなたにCapsLockキーの問題を得ましたか。 –

答えて

0
@Override 
public void onClick(View v) { 

switch(v.getId()){ 

case R.id.costumButton: 
    adapter.updateView(1); 
break; 
..... 
} 

public class YourAdapter extends BaseAdapter { 
    private int visibleFlag = 0; 
    /// 
    //// 
    public void updateView(int flag) { 
     visibleFlag = flag; 
     notifydatasetchanged(); 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 

     View MyView = convertView; 
     final int pos=position; 

     LayoutInflater li = (LayoutInflater)MyContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     MyView = li.inflate(R.layout.favor_item, null); 


     ImageView iv = (ImageView) MyView.findViewById(R.id.favor_item_image); 
     iv.setImageResource(favorSites.get(pos)); 

     deleteFavorImage = (ImageView) MyView.findViewById(R.id.favDelete); 
     if (visibleFlag == 1) 
      deleteFavorImage.setVisibility(View.VISIBLE); 
     deleteFavorImage.setImageResource(R.drawable.dubtndelete); 

     return MyView; 
    } 
+0

convertViewがnullで、ビューのみを膨張させる場合は、getViewをチェックインする必要があります。 convertViewが既にnullでない場合は再利用します。これは、可視領域から出て再利用したいと思うgridview項目のインスタンスであるためです。 グリッドビューのスクロール時にガベージコレクションされる必要がある無駄なgridviewアイテムインスタンスがないため、メモリとパフォーマンスが節約されます。 –

2

私は解決策を見つけました私は同じ問題だったので。

コード

public View getView(final int position, View convertView, 
      ViewGroup parent) { 
     View vi = convertView; 

     if (vi == null) 
      vi = inflater.inflate(R.layout.horizontal_color_images_row, 
        null); 
     img_uparrow = (ImageView)vi.findViewById(R.id.img_uparrow); 
     if(positionSelected==position){ 
       img_uparrow.setVisibility(View.VISIBLE); 
      } 
     else 
      img_uparrow.setVisibility(View.INVISIBLE); 

return vi; 
    } 
+0

には1票が加算されます。あなたは私の時間を救った。 –

関連する問題