以编程方式创建按钮并使用侦听器从第一个按钮创建下一个按钮

Posted

技术标签:

【中文标题】以编程方式创建按钮并使用侦听器从第一个按钮创建下一个按钮【英文标题】:Create button programmatically and create next button from the first button with listener 【发布时间】:2017-12-28 23:52:41 【问题描述】:

我想知道这个奇怪的事情。我想创建一个按钮,当单击该按钮时,我想创建一个新按钮并删除旧按钮,所有这些都只有代码。

到目前为止,这是我的代码,但它并没有像我希望的那样工作。 这里有什么输入吗?谢谢。

    public void createRounds(int rounds)
    ArrayList<Button> buttonArray = new ArrayList<>();
    for(int i=0;i<=rounds;i++)
        bk = new Button(getActivity());
        bk.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
        bk.setBackground(getResources().getDrawable(R.drawable.btnshapegreen));
        bk.setId(i);
        bk.setText("Button "+i);
        buttonArray.add(bk);
    
    for(final Button a : buttonArray)
            generated_time.addView(a);
            a.setOnClickListener(new View.OnClickListener() 
                @Override
                public void onClick(View view) 
                    Toast.makeText(getActivity(),a.getText().toString(),Toast.LENGTH_LONG).show();
                    generated_time.removeView(a);
                
            );
    

我知道 for-each 循环确实会一次添加所有按钮,但没有办法一次添加一个吗?

【问题讨论】:

也许你可以改变它的 id ?并创建一个全局 onclicklistener 然后你就可以按照你的计划在你的听众上做任何你想做的事情。 【参考方案1】:

我创建了示例代码来回答我对您的问题的理解,请参阅下面的代码,其中包含 XMLJAVA

XML

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_
    android:layout_>

</android.support.constraint.ConstraintLayout>

JAVA

public class MainActivity extends AppCompatActivity implements View.OnClickListener 

    private int id = 0;
    private Button button;
    private ConstraintLayout layout;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        layout = findViewById(R.id.container);
        button = new Button(this);
        button.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        button.setId(id);
        button.setText(String.format("%d", id));
        button.setOnClickListener(this);
        layout.addView(button);
        layout.requestLayout();
    

    @Override
    public void onClick(View v) 
        if (v.getId() == id) 
            id++;
            button.setId(id);
            button.setText(String.format("%d", id));
            layout.requestLayout();
        
    

【讨论】:

这成功了。现在我将添加一些额外的东西。非常感谢

以上是关于以编程方式创建按钮并使用侦听器从第一个按钮创建下一个按钮的主要内容,如果未能解决你的问题,请参考以下文章

当内部按钮触摸时,如何从 Superview 中删除以编程方式创建的子视图?

以编程方式创建按钮并设置背景图像

加速大量以编程方式创建的按钮显示

如何以编程方式创建按钮?

以编程方式设置按钮样式

单击事件不适用于以编程方式/动态创建的选项按钮