2012-01-19 76 views
0

我已经创建了一个gridview并为其使用自定义适配器。我在网格视图内添加了两个图像。一个是图像,另一个看起来像关闭按钮(在所有网格视图项目中都是相同的)。关闭按钮在开始时被设置为不可见,我在我的活动中有另一个按钮,我想要的是:当我点击这个按钮时,我想在我的网格视图的每个元素中设置关闭按钮,但现在,当点击在它上面,没有任何反应。 下面是我的代码:设置gridview元素的可见性

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; 
    ..... 
    } 

这是我的形象适配器代码:

  @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文件中的代码:

  <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

得到了与你的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,则重用convertView,因为这是一个gridview项目的实例,刚刚离开可见空间并希望被重用。 这可以节省内存和性能,因为您没有浪费gridview项目实例,而这些实例在滚动gridview期间必须进行垃圾回收。 –

2

我找到了解决办法因为我是同样的问题。

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方法把下面的代码

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票给你。你救了我的时间。 –