public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//遍历控件,如何是按钮就注册点击事件监听器
LinearLayout MainLayout = (LinearLayout) getLayoutInflater().inflate(R.layout.activity_main, null);
for (int i = 0; i < MainLayout.getChildCount(); i++) {
View v = MainLayout.getChildAt(i);
if (v instanceof Button)
{
Button button = (Button) v;
button.setOnClickListener(this);
}
}
@Override
public void onClick(View v) {
switch (v.getId())
{
//按钮响应代码
case R.id.ButtonGetContent:
EditText txtContent = (EditText) findViewById(R.id.Edit_Name);
Toast.makeText(MainActivity.this,txtContent.getText().toString(),Toast.LENGTH_SHORT).show();
default:
break;
}
}
}
回复讨论(解决方案)
你Button都没实例化,设置他的点击事件没用的,单纯的实例化外层的LinearLayout ,并不能把内层的Button也实例化出来
你已经用seftContextView加载了布局,为什么下边又用 LinearLayout MainLayout = (LinearLayout) getLayoutInflater().inflate(R.layout.activity_main, null);方法加载了一次呢?这样确定没有问题,显示的与你遍历的是一致的吗?
不知道findviewbyid??
.inflate
问题就出在这里.
你这是重新实例化了一个layout, 并且这个layout并没有加入到activity中显示. 所以你加了监听器, 但没有显示出来
怎么会响应.
你应该是获取activiy中已经绑定的layout, 然后遍历控件.Activity.getWindow.getDecorView() 控件对象需要实例化
代码有两个问题,一个是上面他们说的,setContentView(R.layout.activity_main);是显示到界面的,你注册监听的button是你用inflate加载出来的另一个对象,并不是显示在界面的button
另一个是你遍历控件的方法并不一定能遍历出所有button,你的跟布局是LinearLayout,如果跟布局的一个子view也是一个layout,那这个子layout里面的button你这样循环是遍历不到的