【问题标题】:How to create a dynamic array button in Android?如何在 Android 中创建动态数组按钮?
【发布时间】:2016-01-16 14:30:49
【问题描述】:

我有一个按钮。我想为按钮编写函数“onClick”。 每次单击它时,我都希望在屏幕上创建一个新按钮。 还有那个要添加到按钮数组列表中的新按钮。

我搜索过,但找不到任何答案。所有的答案都是关于通过拖放来创建按钮,而不是动态创建它们。

谢谢

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Click to add"
        android:id="@+id/B1"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:onClick="clicktoaddcode"
        />
</RelativeLayout>

package com.example.yas.dynamicbutton;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void clicktoaddcode(View V){
        Toast.makeText(MainActivity.this, "Created", Toast.LENGTH_SHORT).show();
    }
}

【问题讨论】:

  • 您需要使您的问题更加清晰,并提供您目前拥有的代码以及发生/未发生的事情才能获得好的答案。

标签: android arrays button dynamic


【解决方案1】:

您必须使用 ArrayList。

List<Button> btnList = new ArrayList<>();

// Call Your ClickListener
btnList.add(new Button(YourContext));
YourParent.addView(btnList.get(btnList.size() - 1 ));

编辑

MainActivity.java

public class MainActivity extends AppCompatActivity {

    LinearLayout container;

    List<Button> btnList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        container = (LinearLayout)findViewById(R.id.container);


    }

    public void addBtn(View v){
        btnList.add(new Button(this));
        container.addView(btnList.get(btnList.size() - 1 ));
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    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:layout_width="match_parent"
    android:layout_height="match_parent" android:fitsSystemWindows="true"
    tools:context=".MainActivity">

    <LinearLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:clickable="true"
        android:onClick="addBtn">

    </LinearLayout>

</android.support.design.widget.CoordinatorLayout>

【讨论】:

  • 在“YourContext”和“YourParent”我应该写什么?
  • 您必须设置活动实例而不是 YourContext,而 YourParent 是您要在其中添加 Button 的主要布局
  • 你能给我发一个小例子吗? XML 文件和 mainactivity.java 谢谢
  • 谢谢。我做到了,但我有一个问题: TextView T = new TextView(MainActivity.this); T.setText(你好);设置内容视图(T); textview 出现在我拥有的按钮上。我想要 81 个 textview 9*9 like。
  • 你的问题在哪里?!这只是描述
【解决方案2】:

为你的 XML 提供这个 -

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center">

        <Button
            android:id="@+id/myButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Add one more" />

        <LinearLayout
            android:orientation="vertical"
            android:id="@+id/myLinearLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center">

        </LinearLayout>

    </LinearLayout>
</ScrollView>

这在 Java 中-

final LinearLayout linearLayout = (LinearLayout)findViewById(R.id.myLinearLayout);
    Button button = (Button)findViewById(R.id.myButton);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Button button = new Button(MainActivity.this);
            button.setText("A new Button");
            linearLayout.addView(button);
        }
    });

【讨论】:

  • 当我运行它时:不幸的是程序名称已停止。
  • 您应该知道使用日志来查找问题所在。这段代码工作得很好。您的代码的其他部分肯定有其他问题。
  • E/AndroidRuntime: java.lang.RuntimeException: 无法实例化活动 ComponentInfo{com.example.yas.dbutton/com.example.yas.dbutton.MainActivity}: java.lang.NullPointerException: Attempt在空对象引用上调用虚拟方法 'android.view.View android.view.Window.findViewById(int)'
【解决方案3】:

创建无限大小数组的最简单方法是使用 String Builder。这允许您在运行时添加许多元素。它有 3 个主要组件。

  1. 声明和初始化。
  2. 增值/附加
  3. 打印/使用

在 Android Studio 的任何地方使用下面的代码。

//Basic Decleration
        StringBuilder myString = new StringBuilder();
        
//Adding data
       myString.append("Hello text <br>");
        myString.append("some more data <br>");
        myString.append("more data to store <br>");
        
//Displaying in already created text view
        deviceDetails.setText(Html.fromHtml(callLogs+""));

注意:我将其视为 HTML 字符串和“ " 标签将在文本视图中创建下一行。因此,所有添加的数据都将显示在新行中。

【讨论】:

    猜你喜欢
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多