Странная графическая ошибка с GridView в Android - PullRequest
0 голосов
/ 13 июня 2011

Что у меня есть: Вид сетки с помощью кнопки-адаптера. Вот код адаптера

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

   }  

Проблема: При прикосновении к кнопке на экране и перемещении пальца в верхнее или верхнее левое, нижнее или нижнее угловое положение моя кнопка изменяет размеры и становится такой (изображение ниже): 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 голосов
/ 13 июня 2011

Я бы не стал хранить ваши кнопки в этом списке кнопок.(Статика там тоже подозрительная).

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*, который вы нам не показали?

...