为啥按钮没反应?_安卓软件开发教程-查字典教程网
为啥按钮没反应?
为啥按钮没反应?
发布时间:2018-02-01 来源:查字典编辑
摘要:publicclassMainActivityextendsAppCompatActivityimplementsView.OnClickL...

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你这样循环是遍历不到的

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新安卓软件开发学习
    热门安卓软件开发学习
    编程开发子分类