为啥按钮没反应?

kofvkof 2017-06-18 01:29:52
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;
}
}
}
...全文
308 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohuh421 2017-06-22
  • 打赏
  • 举报
回复
.inflate 问题就出在这里. 你这是重新实例化了一个layout, 并且这个layout并没有加入到activity中显示. 所以你加了监听器, 但没有显示出来 怎么会响应. 你应该是获取activiy中已经绑定的layout, 然后遍历控件.Activity.getWindow.getDecorView()
枸杞泡水 2017-06-22
  • 打赏
  • 举报
回复
不知道findviewbyid??
developerzjy 2017-06-22
  • 打赏
  • 举报
回复
代码有两个问题,一个是上面他们说的,setContentView(R.layout.activity_main);是显示到界面的,你注册监听的button是你用inflate加载出来的另一个对象,并不是显示在界面的button 另一个是你遍历控件的方法并不一定能遍历出所有button,你的跟布局是LinearLayout,如果跟布局的一个子view也是一个layout,那这个子layout里面的button你这样循环是遍历不到的
yxz247 2017-06-22
  • 打赏
  • 举报
回复
控件对象需要实例化
不吃腥的貓 2017-06-21
  • 打赏
  • 举报
回复
你已经用seftContextView加载了布局,为什么下边又用 LinearLayout MainLayout = (LinearLayout) getLayoutInflater().inflate(R.layout.activity_main, null);方法加载了一次呢?这样确定没有问题,显示的与你遍历的是一致的吗?
MissZzz丶 2017-06-19
  • 打赏
  • 举报
回复
你Button都没实例化,设置他的点击事件没用的,单纯的实例化外层的LinearLayout ,并不能把内层的Button也实例化出来

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧