【问题标题】:Create dynamically n number of buttons on click and populate单击并填充时动态创建 n 个按钮
【发布时间】:2016-04-30 03:26:00
【问题描述】:

您好,每次点击按钮时动态创建似乎都不起作用。

我目前有一个包含 20 个名称的列表,所以我想为每个名称生成 20 个按钮,作为字符串列表中的名称,我想用这些名称填充这 20 个按钮。

从这 20 个按钮中,我将单击并具有一系列子名称,再次显示为按钮,但这些会因第一次单击而异。

我想这样做,因为名称列表会随着时间的推移而扩展,而不是从头开始执行每个按钮,让系统知道有多少按钮并为每个按钮加载名称是有意义的。

  1. 我需要一个循环并设置数字 20,以便生成 20 个按钮。 id 为 buttonname1 到按钮名称 20。

  2. 使用按钮 1 到 20 的关联文本填充生成的按钮。

  3. 我需要一个带有按钮模板的布局,这样按钮在生成时看起来是一样的。非常简单,但我发现的例子都没有意义或工作。

如果有人能指出我对此有用的教程,我将不胜感激,同时我将继续搜索。

如果一开始我可以生成 20 个具有 20 个 id 的按钮,那就开始了。

谢谢

【问题讨论】:

  • 我认为您应该更喜欢列表视图,因为使用 20 个按钮没有任何意义。
  • 查看这个问题..这可能会有所帮助stackoverflow.com/questions/17914098/…
  • 这可能不是最好的前进方式,但在目前看来是有意义的。感谢您的意见。

标签: android button dynamic buttonclick


【解决方案1】:
  1. 我需要一个循环并设置数字 20,以便生成 20 个按钮。标识为 buttonname1 到按钮名称 20。
  2. 使用按钮 1 的关联文本填充生成的按钮 到 20 岁。

您需要考虑使用ListView 或RecyclerView。这些视图接收任意数量的数据并一次显示几个项目。在您的情况下,这些项目将是按钮,其文本是您要显示的名称。

为这些按钮中的每一个附加一个监听器,定义点击时需要执行的操作。您需要研究膨胀视图并动态添加它们。

仅此而已。有关于这些的非常好的文档和大量的 SO 问题。

  1. 我需要一个带有按钮模板的布局,这样按钮在生成时看起来是一样的。非常简单,但我发现的例子都没有 感觉或工作。

您需要阅读有关样式和主题的信息。当您定义按钮的 XML 时,您可以在那里设置样式。由于您一次又一次地扩展同一个 XML,因此您的所有按钮看起来都一样。

【讨论】:

  • 老实说,我在这里读过很多这些东西,我尝试一下,有时效果很好,我得到了,有时我没有。我显然没有得到一些东西并设法搞砸了。例如,我在网上找到了一个示例,我将在下面发布相关的示例。它创建了 20 个按钮,我调整了格式,所以它大致是我想要开始的。
【解决方案2】:

编辑:您需要的是动态创建视图。如果您确实需要一个按钮作为您的视图,请以编程方式添加它们。

Button button = new Button(this); // example
  1. 我需要一个循环并设置数字 20,以便生成 20 个按钮。 id 为 buttonname1 到按钮名称 20。
  2. 使用按钮 1 到 20 的关联文本填充生成的按钮。
    String[] names = {"John","Jack",...,"Someone"}; // 20 names
    Button[] buttons = new Button[20];
    for (int i = 0; i < 20; i++) {
        Button button = new Button(this);
        button.setId("buttonname"+(i+1));
        button.setText(names[i]);
        buttons[i] = button;
    }

然后,您可以将数组中的按钮添加到布局中,看起来应该是这样的。只需确保将布局方向设置为垂直,这样按钮就会堆叠在每个按钮的顶部。你可以搜索一下。

    LinearLayout layout = (LinearLayout)findViewById(R.id.linearLayout);
    for (int i = 0; i < 20; i++) {
        layout.addView(buttons[i]);
    }
  1. 我需要一个带有按钮模板的布局,这样按钮在生成时看起来是一样的。非常简单,但我发现的示例都没有意义或工作。

你可以参考this tutorial来设置更多你想要的属性。您可以搜索“以编程方式添加 Android 视图”、“在 Android 中创建动态视图”等关键字。以编程方式和动态使用这个词。希望这对您的情况有所帮助。

【讨论】:

  • 不鼓励仅链接的答案。
【解决方案3】:

好吧,今天我第二次得到了我需要的东西(恢复了它),只需要弄清楚下一步该做什么,但这是我的代码。

我的布局主 .xml

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

我的活动。基于在网上找到的 ANDROID 中的 DYNAMIC BUTTON。http://alexanderoorayil.blogspot.co.uk/2012/05/dynamic-button-in-android.html

 package com.example.dynamic_buttons;


 import android.app.Activity;

 import android.graphics.Typeface;

 import android.os.Bundle;

 import android.view.View;

 import android.view.ViewGroup.LayoutParams;

 import android.widget.Button;

 import android.widget.CheckBox;

 import android.widget.CompoundButton;

 import android.widget.CompoundButton.OnCheckedChangeListener;

 import android.widget.LinearLayout;

 import android.widget.ScrollView;

 import android.widget.Toast;


public class MyActivity extends Activity {

Button b;

ScrollView scrollview;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

  //String Manuf;

    scrollview = new ScrollView(this);

    LinearLayout linearlayout = new LinearLayout(this);

    linearlayout.setOrientation(LinearLayout.VERTICAL);

    scrollview.addView(linearlayout);



    for(int i = 0; i<28;i++)

    {

        LinearLayout linear1 = new LinearLayout(this);

        linear1.setOrientation(LinearLayout.HORIZONTAL);

        linearlayout.addView(linear1);

        b = new Button(this);

        int id = getResources().getIdentifier("Manuf"+i, "string", getPackageName());
        String Manuf = getResources().getString(id);

        b.setText(Manuf);

        b.setId(i);

        b.setTextSize(30);

        b.setPadding(0,0,0,0);

       // b.setTypeface(Typeface.SERIF,Typeface.ITALIC);

        b.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));



        linear1.addView(b);



       /* CheckBox checkbox = new CheckBox(this);

        checkbox.setId(i);

        checkbox.setText("Wow..");

        linear1.addView(checkbox);



        checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {



            @Override

            public void onCheckedChanged(CompoundButton arg0, boolean arg1) {

                // TODO Auto-generated method stub

                Toast.makeText(getApplicationContext(), "Checked.."+ arg0.getId(), Toast.LENGTH_SHORT).show();

            }

        });
    */


        b.setOnClickListener(new View.OnClickListener() {



            @Override

            public void onClick(View v) {

                // TODO Auto-generated method stub

                Toast.makeText(getApplicationContext(), "Yipee.."+ v.getId(), Toast.LENGTH_SHORT).show();

            }

        });

    }

    this.setContentView(scrollview);

}

}

我的 strings.xml 文件中的字符串以 Manfu0 -28 开头。

如果没有您的帮助和 cmets,我无法做到这一点,希望我能学习如何使用,因为现在我需要为某些被按下的按钮 id 创建一些操作。

谢谢

【讨论】:

  • 您可以将回答您问题的问题的解决方案标记为回答,这样其他人就会知道它已经解决了。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-21
  • 2018-06-17
相关资源
最近更新 更多