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

时间:2018-08-05 05:55:42

标签: java android

我正在制作一个游戏,其中平台将在用户清除的每个级别中添加新按钮。但是我无法在运行时在项目中添加新的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>

3 个答案:

答案 0 :(得分:0)

Button newButton = new Button(null);

您将上下文设置为空,我建议您提供适当的上下文。您也可以使用newButton.setTag(value)

为按钮设置标签

答案 1 :(得分:0)

这是因为在将按钮添加到布局后,无论相同的活动,您都将启动新的活动。每当创建活动时,它将始终使用初始xml格式。我认为您的印象是添加新按钮将继续存在并成为XML的一部分。如果要启动新活动,那是不对的。在Bundle中设置新的Button值,然后在onCreate中检查是否存在bundle。如果存在,则添加一个新按钮。

context.Response.ClearContent();
context.Response.StatusCode = (int) HttpStatusCode.Unauthorized;
context.Response.End();

请问您为什么进行新活动?只需在同一活动中添加按钮,否则您的活动堆栈将随着每个级别而变得庞大。

答案 2 :(得分:0)

您的密码不正确 您创建一个按钮并添加到LinearLayout中,然后调用startActivity加载一个Activity。因此,您重置了LinearLayout并清除了按钮。

您应该:

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);

        newForm.putExtra("a", a);

        startActivity(newForm);


    }
});

并在create中获得Extras:

String a = getIntent().getIntExtra("a");

现在您可以创建按钮了。