使用按钮 onclick 事件在运行时添加按钮

我正在制作一个游戏,其中平台将在用户清除的每个级别中添加新按钮。但我无法在运行时在项目中添加新的 xml 标记。我有点不知道要使用什么或如何实施。


    run = (Button)findViewById(R.id.btnRunChallengeMode);


    run.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View view) {


            Intent newForm = new Intent(Form2.this,Form2.class);

            buttonPanel = (LinearLayout)findViewById(R.id.LinearButtonPanel);

            Button newButton = new Button(null);

            newButton.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));

            newButton.setId(a);

            newButton.setText("Button " + a);

            buttonPanel.addView(newButton);

            a++;

            startActivity(newForm);



        }

    });

下面是xml代码


<HorizontalScrollView

    android:id="@+id/buttonPanelChallengeMode"

    android:layout_width="match_parent"

    android:layout_height="180dp"

    android:layout_below="@+id/IDE"

    android:layout_marginBottom="3dp"

    android:layout_marginLeft="8dp"

    android:layout_marginRight="8dp"

    android:background="@color/colorPrimary"

    app:layout_constraintBottom_toBottomOf="parent"

    tools:layout_editor_absoluteX="8dp">


    <LinearLayout

        android:layout_width="wrap_content"

        android:layout_height="match_parent"

        android:orientation="vertical"

        android:id="@+id/LinearButtonPanel">



    </LinearLayout>


</HorizontalScrollView>


千万里不及你
浏览 204回答 3
3回答

梵蒂冈之花

这是因为在将按钮添加到布局后,您将启动新的 Activity,无论它是同一个 Activity。每当创建活动时,它将始终使用初始 xml 格式。我认为您的印象是添加新按钮将持续存在并成为 XML 的一部分。如果你想开始新的活动,那不是真的。在 Bundle 中设置新的 Button 值,然后在 onCreate 检查 bundle 的存在。如果存在,则添加一个新按钮。int buttonId = -1;protected void onCreate(Bundle b){&nbsp; &nbsp; &nbsp;//set the layout related stuff first&nbsp; &nbsp; &nbsp;Bundle b = getIntent().getExtras();&nbsp; &nbsp; &nbsp;if(b!= null && (b.getInt(NEW_BUTTON_KEY, -1)!=-1)){&nbsp; &nbsp; &nbsp; &nbsp; buttonPanel = (LinearLayout)findViewById(R.id.LinearButtonPanel);&nbsp; &nbsp; &nbsp; &nbsp; for(int i = 0; i< b.getInt(NEW_BUTTON_KEY, -1); i++)&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Button newButton = new Button(this);&nbsp; &nbsp; &nbsp; &nbsp; newButton.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));&nbsp; &nbsp; &nbsp; &nbsp; newButton.setId(i);&nbsp; &nbsp; &nbsp; &nbsp; newButton.setText("Button " + i);&nbsp; &nbsp; &nbsp; &nbsp; buttonPanel.addView(newButton);&nbsp; &nbsp; &nbsp;}}顺便说一下,你为什么要进行新的活动?只需在同一个活动中添加按钮,否则您的活动堆栈将随着每个级别变得庞大。

呼啦一阵风

Button&nbsp;newButton&nbsp;=&nbsp;new&nbsp;Button(null);你给上下文空,我建议你给适当的上下文。您也可以为按钮设置标签newButton.setTag(value)

慕田峪9158850

您的代码不正确,您创建一个按钮并添加到 LinearLayout,然后调用 startActivity 以加载 Activity。所以你重置了 LinearLayout 并清除了按钮。你应该 :run = (Button)findViewById(R.id.btnRunChallengeMode);run.setOnClickListener(new View.OnClickListener() {&nbsp; &nbsp; @Override&nbsp; &nbsp; public void onClick(View view) {&nbsp; &nbsp; &nbsp; &nbsp; Intent newForm = new Intent(Form2.this,Form2.class);&nbsp; &nbsp; &nbsp; &nbsp; newForm.putExtra("a", a);&nbsp; &nbsp; &nbsp; &nbsp; startActivity(newForm);&nbsp; &nbsp; }});并在 create 中,获取 Extras :String a = getIntent().getIntExtra("a");现在您可以创建按钮了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java