【问题标题】:Creating dynamic buttons in android在android中创建动态按钮
【发布时间】:2019-04-18 08:55:50
【问题描述】:

我正在开发 Watson Conversation 聊天机器人。我一直在尝试在我的聊天机器人应用程序中实现“选项”响应类型。我的问题是“在 Android 中创建 'n' 个动态按钮,其中 n 是后端中存在的选项标签名称的数量(IBM Watson Conversation)”

我已经能够以文本形式检索标签名称。现在我必须将这些标签名称放在“可点击按钮”中。这样当用户点击按钮时,就会将一个值传递给后端(Watson Conversation API)。

这就是我从后端检索选项(响应类型)的方式。 Watson Conversation 以 JSON 形式发送回复。

标签名称检索码:

 str = response.getOutput().getGeneric().get(i).getResponseType();
JSONArray arrayOptions = new JSONArray(response.getOutput().getGeneric().get(i).getOptions());
            int j=0; //j is used to count the number of options
            while (j<arrayOptions.length()){
              final Message outMessage2 = new Message();
              outMessage2.setMessage(response.getOutput().getGeneric().get(i).getOptions().get(j).getLabel());
              outMessage2.setId("2");
              System.out.println(outMessage2);
              messageArrayList.add(outMessage2);
              j++;
            }

【问题讨论】:

  • 上述代码sn-p存在于方法private void sendMessage()中。我需要将此 j 变量传递给类型为 protected 的 onCreate(Bundle savedInstanceState) 方法
  • “我需要将这个 j 变量传递给 onCreate...”——不,你不需要。只需在代码完成后创建并添加您的按钮。至于实际创建这些按钮,现场已有数百个示例和建议的解决方案。你尝试了哪些?您在实施过程中遇到了什么问题?
  • @Mike M.感谢您的回复。 “只需在您的代码完成时创建并添加您的按钮”。您能否详细说明或提供给我一个 sn-p?

标签: java android watson-assistant


【解决方案1】:

试试这个来解决你的问题

首先在xml里面创建一个LinearLayout布局

                 <LinearLayout
                    android:id="@+id/layout_dynamic"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_vertical"
                    android:layout_marginLeft="5dp"
                    android:layout_marginRight="5dp"
                    android:orientation="vertical">

                </LinearLayout>

之后,使用下面的代码

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

for (int i = 0; i < YOURARRAY.length(); i++) {
String label = <Button Name as You Like>;
 LinearLayout childLayout = new LinearLayout(getActivity());
 LinearLayout.LayoutParams linearParams = new LinearLayout.LayoutParams(
 LinearLayout.LayoutParams.MATCH_PARENT LinearLayout.LayoutParams.WRAP_CONTENT);
 childLayout.setLayoutParams(linearParams);
 Button btnName = new Button(getActivity());
 btnName.setLayoutParams(newTableLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT, 1f));

 childLayout.addView(btnName, 0);
 layout_dynamic.addView(childLayout);}

希望这会对你有所帮助。

【讨论】:

  • 感谢您的回复。在哪里使用这个“LinearLayout layout_dynamic”代码?
  • 我应该在 onCreate(bundle savedInstance) 方法中使用它吗?
  • 我需要在我的代码中使用我的 'j' 变量。 'j' 计算后端的选项。根据 'j' 值,将创建许多动态按钮。
  • @RahoolChatterjee - LinearLayout 是您必须在其上创建动态按钮的布局,可能是在 MainActivity.xml 中
  • 第二个for循环,从中获取动态按钮列表
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
  • 2016-01-16
  • 1970-01-01
  • 2013-09-05
  • 1970-01-01
相关资源
最近更新 更多