为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

千万里不及你 2021-06-24 18:19:46
我正在制作一个游戏,其中平台将在用户清除的每个级别中添加新按钮。但我无法在运行时在项目中添加新的 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 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

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


int buttonId = -1;

protected void onCreate(Bundle b){

     //set the layout related stuff first

     Bundle b = getIntent().getExtras();

     if(b!= null && (b.getInt(NEW_BUTTON_KEY, -1)!=-1)){

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

        for(int i = 0; i< b.getInt(NEW_BUTTON_KEY, -1); i++) 

        Button newButton = new Button(this);

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

        newButton.setId(i);

        newButton.setText("Button " + i);

        buttonPanel.addView(newButton);


     }

}

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


查看完整回答
反对 回复 2021-06-30
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

Button newButton = new Button(null);

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


查看完整回答
反对 回复 2021-06-30
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

您的代码不正确,您创建一个按钮并添加到 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");

现在您可以创建按钮了。


查看完整回答
反对 回复 2021-06-30
  • 3 回答
  • 0 关注
  • 203 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信