Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:按钮的GridView,但按钮没有响应_Android_Button_Gridview - Fatal编程技术网

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

Android:按钮的GridView,但按钮没有响应,android,button,gridview,Android,Button,Gridview,我在GridView上有一个非常基本的程序,带有一些按钮,如下代码所示。程序运行良好,按钮显示在网格中,但当我单击时,它们没有响应。如果我将代码更改为图像的gridview,它可以正常工作。我相信我在gridView.setOnItemClickListener或公共视图getView()中的某个地方错了。艾恩建议?谢谢 public class MainActivity extends Activity { public String[] filenames ={"B1","B2","

我在GridView上有一个非常基本的程序,带有一些按钮,如下代码所示。程序运行良好,按钮显示在网格中,但当我单击时,它们没有响应。如果我将代码更改为图像的gridview,它可以正常工作。我相信我在
gridView.setOnItemClickListener
公共视图getView()中的某个地方错了。艾恩建议?谢谢

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; 
        }
    }    
}
公共类MainActivity扩展活动{
公共字符串[]文件名={“B1”、“B2”、“B3”、“B4”、“B5”、“B6”};
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GridView GridView=(GridView)findViewById(R.id.GridView);
setAdapter(新按钮适配器(this));
setOnItemClickListener(新的OnItemClickListener(){
公共无效MClick(AdapterView父级、,
视图v,整数位置,长id){
Toast.makeText(getBaseContext(),
“pic”+(位置+1)+“已选定”,
吐司。长度(短)。show();
}
});        
}
公共类ButtonAdapter扩展BaseAdapter{
私人语境;
公共按钮适配器(上下文c){
上下文=c;
}
public int getCount(){
返回filenames.length;
}
公共对象getItem(int位置){
返回位置;
}     
公共长getItemId(int位置){
返回位置;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
按钮btn;
如果(convertView==null){
btn=新按钮(上下文);
btn.setLayoutParams(新的GridView.LayoutParams(100100));
btn.设置填充(8,8,8,8);
}否则{
btn=(按钮)转换视图;
}               
btn.setText(文件名[位置]);
btn.setTextColor(颜色为白色);
btn.setId(位置);
返回btn;
}
}    
}

您需要将按钮属性设置为可聚焦和可单击为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; 
        }
    }    
}
公共类MainActivity扩展活动{
公共字符串[]文件名={“B1”、“B2”、“B3”、“B4”、“B5”、“B6”};
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GridView GridView=(GridView)findViewById(R.id.GridView);
setAdapter(新按钮适配器(this));
setOnItemClickListener(新的OnItemClickListener(){
公共无效MClick(AdapterView父级、,
视图v,整数位置,长id){
Toast.makeText(getBaseContext(),
“pic”+(位置+1)+“已选定”,
吐司。长度(短)。show();
}
});        
}
公共类ButtonAdapter扩展BaseAdapter{
私人语境;
公共按钮适配器(上下文c){
上下文=c;
}
public int getCount(){
返回filenames.length;
}
公共对象getItem(int位置){
返回位置;
}     
公共长getItemId(int位置){
返回位置;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
按钮btn;
如果(convertView==null){
btn=新按钮(上下文);
btn.setLayoutParams(新的GridView.LayoutParams(100100));
btn.设置填充(8,8,8,8);
btn.setFOcusable(假);
btn.可设置可点击(错误);
}否则{
btn=(按钮)转换视图;
}               
btn.setText(文件名[位置]);
btn.setTextColor(颜色为白色);
btn.setId(位置);
返回btn;
}
}    
}

您需要将按钮属性设置为可聚焦和可单击为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; 
        }
    }    
}
公共类MainActivity扩展活动{
公共字符串[]文件名={“B1”、“B2”、“B3”、“B4”、“B5”、“B6”};
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GridView GridView=(GridView)findViewById(R.id.GridView);
setAdapter(新按钮适配器(this));
setOnItemClickListener(新的OnItemClickListener(){
公共无效MClick(AdapterView父级、,
视图v,整数位置,长id){
Toast.makeText(getBaseContext(),
“pic”+(位置+1)+“已选定”,
吐司。长度(短)。show();
}
});        
}
公共类ButtonAdapter扩展BaseAdapter{
私人语境;
公共按钮适配器(上下文c){
上下文=c;
}
public int getCount(){
返回filenames.length;
}
公共对象getItem(int位置){
返回位置;
}     
公共长getItemId(int位置){
返回位置;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
按钮btn;