Android动态创建按钮:setOnClickListener不起作用

时间:2009-10-31 06:36:49

标签: android button onclick

onClick永远不会开火!为什么不?请帮帮我。

for(int i = 0; i < 12; i++) {
    String title = "Button" + i;
    Button sliderButton = new Button(this);
    sliderButton.setText(title);
    glideMenuTray.addView(sliderButton,100,40);

    sliderButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Log.d("gm", "Tapped ");
        }
    });
}

5 个答案:

答案 0 :(得分:2)

我不是这方面的专家,但它可能与垃圾收集有关,而且OnClickListeners超出了范围。

虽然我不认为你可以使用Dimitar提到的onClickListeners的超级简单方法,你可以使用他链接的部分讨论的中间方法,即使它不是一种新的方法。要在此处重复示例代码,请执行以下操作:

View.OnClickListener handler = View.OnClickListener() {
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.myButton: // doStuff
                break;
            case R.id.myOtherButton: // doStuff
                break;
        }
    }
}

findViewById(R.id.myButton).setOnClickListener(handler);
findViewById(R.id.myOtherButton).setOnClickListener(handler);

如果区分按钮的唯一区别是它们的标题文本,那么您可以使用它来在主onClick方法中区分它们。

答案 1 :(得分:2)

另外,不是shure,我曾经在TextView上遇到类似的问题,因为我没有添加setClickable(true)

我的代码就像

TextView text = new TextView(this);
text.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
text.setText("***");
text.setClickable(true);

text.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        //My action
    }
});

myViewGroup.addView(text );

希望这有帮助

答案 2 :(得分:0)

如果您使用的是Donut或Eclair,您可以使用在您的Activity中注册的常用点击监听器,并将其与布局XML中的按钮挂钩。

供参考,请查看here,类别更轻松的点击监听器

答案 3 :(得分:0)

我是否正确地假设以下行:

glideMenuTray.addView(sliderButton,100,40);

将视图添加到coords x:100,y:40到某些视图扩展ViewGroup?

在这种情况下,您将12个按钮堆叠在一起,只有最后一个按钮(标记为Button11)可见(并且可单击)。

如果问题是3岁,我真的希望你现在已经解决了这个问题:)

答案 4 :(得分:0)

在添加视图之前设置setOnClickListener。

for(int i = 0; i < 12; i++) {
    String title = "Button" + i;
    Button sliderButton = new Button(this);
    sliderButton.setText(title);
    sliderButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Log.d("gm", "Tapped ");
        }
    glideMenuTray.addView(sliderButton,100,40);
}