Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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 动态创建按钮并从中调用操作_Android_Button_Runtime_Invoke - Fatal编程技术网

Android 动态创建按钮并从中调用操作

Android 动态创建按钮并从中调用操作,android,button,runtime,invoke,Android,Button,Runtime,Invoke,我在用安卓系统编程。我正在运行时创建一个按钮dynamicallyi.e,而不使用布局。现在我需要从动态创建的按钮调用一个操作。可能吗 我使用了下面的代码来动态创建按钮 按钮btnNew=新按钮此按钮; 字符串text=etName.getText.toString; btnNew.setTexttext; llMain.addViewBtnew,lParams 通过设置侦听器,可以在该特定按钮上执行多个事件 btnNew.setOnClickListener(new OnClickListe

我在用安卓系统编程。我正在运行时创建一个按钮dynamicallyi.e,而不使用布局。现在我需要从动态创建的按钮调用一个操作。可能吗

我使用了下面的代码来动态创建按钮

按钮btnNew=新按钮此按钮; 字符串text=etName.getText.toString; btnNew.setTexttext;
llMain.addViewBtnew,lParams 通过设置侦听器,可以在该特定按钮上执行多个事件

btnNew.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub

            }
        });
试试下面的代码

 Button btnNew = new Button(this);
 btnNew.setId(111);
 btnNew.setOnClickListener(this);

 Button btn2 = new Button(this);
 btn2.setId(222);
 btn2.setOnClickListener(this);

 you can implement onclick listener in your activity 
在onclcik视图中,您可以像下面这样检查id

@Override
    public void onClick(View v) {
        switch (v.getId()) {
        case 111:
            //do some thing here
           break;
         case 222:
            //do some thing here
           break;
 }
};

您可以使用OnClickListener对按钮执行多个操作

btnNew.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub

            //action here .. which you want to perform
        }
    });
您可以使用以下代码:



如果我在运行时使用相同的代码创建多个按钮会怎么样?动态将id设置为button能否请您解释如何为我使用相同代码创建的每个按钮分配id?@Ramesh-谢谢。但这是我创建的单个按钮的情况。当我创建另一个按钮时,它的id也将被设置为111,并参考上一个按钮。那么,我如何才能引用第二个按钮呢?你可以为另一个按钮提供不同的id。我现在需要5个按钮。然后保留5个不同的id,如1、2、3、4、5,然后分配给每个按钮,并在开关盒中检查哪个按钮触发了,如案例1、案例2、案例3,我理解。但顺便说一句,setId111;这行5个按钮的代码有点混乱。我如何实现?这条线放在哪里?是的,我知道这个方法。但我需要为运行时使用同一行代码创建的5个不同按钮分配侦听器。@Lijin。。这5个按钮在哪里?我已经设置了一个按钮来执行这个按钮创建。i、 e,一个名为create的按钮,用于在运行时创建按钮。因此,每当我触摸create按钮时,屏幕上就会动态创建一个按钮。我的目的是为每个按钮设置id,以便可以使用创建的按钮执行不同的操作。我设置的按钮id以后可以在交换机内部使用,以执行所需的操作。好的,看起来您隐藏了按钮的可见性,并且在单击按钮时它们将可见。。。所以你应该在每个按钮上设置OnClickListener。。。当您在运行时显示这些按钮时,它们将在您设置操作时工作……它似乎正在工作。您能详细说明一下我如何实现它吗?setTag类似于setId还是什么?setTag是一个lil不同,但可以以相同的方式使用,并且是一种绕过setId所需的resourceId的方法。setTag还允许您传递任何对象,因此更方便。是的。那很方便。但是在setTag中传递的值是100,这是一个常量。因此,对于运行时创建的所有按钮,该值都是相同的。如何能够单独引用按钮并为其设置操作?我要做的是创建一个id字段为随机设置的类,以及一个在onClick方法中调用的接口回调,这将删除switch语句的使用。您能帮助我实现该逻辑吗?
Button dynamicBtn = new Button(this); // or new Button(getActivity());
dynamicBtn.setTag(100);
dynamicBtn.setOnClickListener(this);

// Override below in fragment or activity that implements 
// 'View.OnClickListener'

@Override
public void onClick(View v) {
        switch ((Integer)v.getTag()) {
        case 100:
            //do something
           break;
        default:
           break;
 }
};
Button dynamicButton = new Button(this);
dynamicButton.setTag(new ButtonTag(100, new ButtonTag.Callback() {
    @Override
    public void run() {
        // run anything here
    }
}));

@Override
public void onClick(View view) {
    ButtonTag tag = (ButtonTag)view.getTag();
    tag.execute();

    // simpler ((ButtonTag)view.getTag()).execute();
}

// don't think you need id anymore 
public static class ButtonTag{

    private Callback callback;
    private int id;

    public ButtonTag(int id, Callback callback){
        this.callback = callback;
        this.id = id;
    }

    public void execute(){
        callback.run();
    }

    public interface Callback{
        public void run();
    }
}