在Android中使用GridView的奇怪图形错误

时间:2011-06-13 15:49:05

标签: android gridview adapter

我有什么:带有buttonadapter的gridview。这是适配器的代码

public class ButtonAdapter extends BaseAdapter {  

     static List<Button> button = new ArrayList<Button>();
    private Context mContext;  

    // Gets the context so it can be used later  
    public ButtonAdapter(Context c) {  
     mContext = c;  

    }  

    public int getCount() {  
     return my.package.names.length;  
    }  

    public Object getItem(int position) {  
     return null;  
    }  

    public long getItemId(int position) {  
     return position;  
    }  

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

     if (convertView == null) {  

         button.add(new Button(mContext));
         button.get(position).setLayoutParams(new GridView.LayoutParams(85, 85));  
         button.get(position).setPadding(8, 8, 8, 8);  
         button.get(position).setOnClickListener(new MyOnClickListener(position)); 
      }  
     else {  

     }    
 button.get(position).setText(my.package.names[position]);  // names is an array of strings  
     button.get(position).setTextColor(Color.BLACK);  
     button.get(position).setBackgroundResource(*Drawable here*);    
     return button.get(position);  
    }  

   }  

问题:当触摸屏幕上的按钮并将手指移动到uperright或uperleft或downleft或downright corner时,我的按钮会调整大小并变为如下所示(图像如下): enter image description here OnClickListener类,非常简单

public class MyOnClickListener implements OnClickListener  
{  
 private final int position;  
  int i;
 public MyOnClickListener(int position)  
 {  
  this.position = position;  
 }  

 public void onClick(View v)  
 {  

  // Preform a function based on the position  
for(i=0; i<9; i++){
    if(this.position == i){
    mypackagemyclass.flipper.setDisplayedChild(i); //viewflipper
     mypackagemyclass.slider.open(); //sliding drawer

}
 }  
}}  

我尝试使用imageadapter,同样的问题。在模拟器和真实设备上。我到处搜索,以前似乎没有人遇到过这个问题。我该怎么办?

1 个答案:

答案 0 :(得分:0)

我不会将您的按钮存储在该按钮列表中。 (静态也有可疑)。

Android会在列表和网格中为您缓存视图,并重复使用已在屏幕外滚动的视图,如果您的网格变大,这将更有效。

我建议您getView()看起来更像这样(未经测试):

public View getView(int position, View convertView, ViewGroup parent) {  
    Button button;
    if (convertView == null) {
        // create button
        button = new Button(mContext);
        button.setLayoutParams(new GridView.LayoutParams(85, 85));  
        button.setPadding(8, 8, 8, 8);  
        button.setTextColor(Color.BLACK);  
    }
    else {
        // reuse button
        button = (Button)convertView;
    }
    // (re)initialise button for this position
    button.setOnClickListener(new MyOnClickListener(position)); 
    button.setText(my.package.names[position]);  // names is an array of strings  
    button.setBackgroundResource(*Drawable here*);    
    return button;
} 

(并删除按钮列表)。

我不能肯定地说它会解决你的问题,但它应该把你和其他人放在同一个页面上: - )

或者您的问题可能出现在*Drawable here*代码中,而您尚未向我们展示过这些代码?