Android:GridView的按钮,但按钮没有响应

问题描述:

我有一个非常基本的程序GridView与一些按钮,如下面的代码。程序运行良好,按钮显示在网格中,但是当我点击时它们没有响应。如果我将我的代码更改为图像的网格视图,它工作正常。我相信我在gridView.setOnItemClickListenerpublic View getView()的某个地方出错了。艾恩的建议?谢谢Android:GridView的按钮,但按钮没有响应

public class MainActivity extends Activity { 
    public String[] filenames ={"B1","B2","B3","B4","B5","B6"};   
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main);   
     GridView gridView = (GridView) findViewById(R.id.gridview); 
     gridView.setAdapter(new ButtonAdapter(this)); 
     gridView.setOnItemClickListener(new OnItemClickListener(){ 
      public void onItemClick(AdapterView<?> parent, 
      View v, int position, long id){     
       Toast.makeText(getBaseContext(), 
         "pic" + (position + 1) + " selected", 
         Toast.LENGTH_SHORT).show(); 
      } 
     });   
    } 

    public class ButtonAdapter extends BaseAdapter { 
     private Context context;  
     public ButtonAdapter(Context c){ 
      context = c; 
     } 
     public int getCount() { 
      return filenames.length; 
     } 
     public Object getItem(int position) { 
      return position; 
     }  
     public long getItemId(int position) { 
      return position; 
     } 
     public View getView(int position, View convertView, ViewGroup parent){ 
       Button btn; 
       if (convertView == null) { 
        btn = new Button(context); 
        btn.setLayoutParams(new GridView.LayoutParams(100, 100)); 
        btn.setPadding(8, 8, 8, 8); 
        }else { 
        btn = (Button) convertView; 
       }    
       btn.setText(filenames[position]);  
       btn.setTextColor(Color.WHITE); 
       btn.setId(position);  
       return btn; 
     } 
    }  
} 
+0

您可以设置gridView.setOnItemClickListener。请参阅下面的链接 – 2012-08-01 03:39:13

您需要将Buttons属性设置为focusable并可点击为false。由于焦点和点击事件在当前情况下由按钮捕获,而不是在网格视图项目上捕获。将您的代码更改为以下内容:

public class MainActivity extends Activity { 
    public String[] filenames ={"B1","B2","B3","B4","B5","B6"};   
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main);   
     GridView gridView = (GridView) findViewById(R.id.gridview); 
     gridView.setAdapter(new ButtonAdapter(this)); 
     gridView.setOnItemClickListener(new OnItemClickListener(){ 
      public void onItemClick(AdapterView<?> parent, 
      View v, int position, long id){     
       Toast.makeText(getBaseContext(), 
         "pic" + (position + 1) + " selected", 
         Toast.LENGTH_SHORT).show(); 
      } 
     });   
    } 

    public class ButtonAdapter extends BaseAdapter { 
     private Context context;  
     public ButtonAdapter(Context c){ 
      context = c; 
     } 
     public int getCount() { 
      return filenames.length; 
     } 
     public Object getItem(int position) { 
      return position; 
     }  
     public long getItemId(int position) { 
      return position; 
     } 
     public View getView(int position, View convertView, ViewGroup parent){ 
       Button btn; 
       if (convertView == null) { 
        btn = new Button(context); 
        btn.setLayoutParams(new GridView.LayoutParams(100, 100)); 
        btn.setPadding(8, 8, 8, 8); 
        btn.setFOcusable(false); 
        btn.setClickable(false); 
        }else { 
        btn = (Button) convertView; 
       }    
       btn.setText(filenames[position]);  
       btn.setTextColor(Color.WHITE); 
       btn.setId(position);  
       return btn; 
     } 
    }  
} 
+0

它的工作原理,谢谢 – DavidNg 2012-08-01 13:07:55