【问题标题】:How do I add button to another activity in android studio using java code rather than xml code如何使用 java 代码而不是 xml 代码将按钮添加到 android studio 中的另一个活动
【发布时间】:2020-11-28 13:19:01
【问题描述】:

我想使用 java 代码将一个按钮从 1 个活动 -“pop_accompaniments.xml”添加到另一个活动 -“pop_cart.xml”。为此,我在“pop_accompaniments.java”中创建了一个类“pop_cart.java”的实例,以调用“”中的函数“cart_button_creator” pop_cart.java”。 但是我的应用一打开就崩溃了。

pop_accompaniments.java

package com.example.myapplication;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import androidx.appcompat.app.AppCompatActivity;

import java.util.Random;

public class pop_accompaniments extends AppCompatActivity implements View.OnClickListener {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.pop_accompaniments);

        Button assorted_condiments = findViewById(R.id.assorted_condiments);
    }

    @Override
    public void onClick(View v) {
        setContentView(R.layout.pop_cart);
        pop_cart main = new pop_cart();
        int id;
        String name;
        Button myButton;
        switch (v.getId()) {
            case R.id.assorted_condiments:
                myButton = new Button(this);
                name = "Assorted Condiments";
                id = generateButtonId();
                main.cart_content_keeper(id, name, myButton);
        }
    }
}

pop_cart.java

package com.example.myapplication;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;

import androidx.annotation.Nullable;

public class pop_cart extends Activity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.pop_cart);
    }

    public void cart_button_creator(String name, int id, Button myButton) {
        //setContentView(R.layout.pop_cart);
        LinearLayout ll = findViewById(R.id.cart_items);
        myButton.setText(name);
        myButton.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        myButton.setId(id);
        ll.addView(myButton);
    }


    public void cart_content_keeper(int id, String name, final Button myButton) {
        int n = 0;
        int[] id_arr = {};
        String[] name_arr = {};
        //int price = 0;

        name_arr = add_item(n, name_arr, name);
        id_arr = add_id(n, id_arr, id);
        n = n + 1;

        Button refresh = findViewById(R.id.refresh);
        final int finalN = n;
        final String[] finalName_arr = name_arr;
        final int[] finalId_arr = id_arr;
        refresh.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (v.getId() == R.id.refresh) {
                    for (int i = 0; i < finalN; i++) {
                        cart_button_creator(finalName_arr[i], finalId_arr[i], myButton);
                    }
                }
            }
        });
    }


    public static String[] add_item(int n, String[] arr, String x)
    {
        int i;

        String[] newarr = new String[n + 1];

        for (i = 0; i < n; i++)
            newarr[i] = arr[i];

        newarr[n] = x;

        return newarr;
    }


    public static int[] add_id(int n, int[] arr, int x)
    {
        int i;

        int[] newarr = new int[n + 1];

        for (i = 0; i < n; i++)
            newarr[i] = arr[i];

        newarr[n] = x;

        return newarr;
    }
}

对不起,这么长的代码,但我已经尝试了几乎所有可能的方法来从另一个类的实例调用函数,以不同的方式传递变量,尝试将整个变量生成器作为函数调用并且只传递视图 v 作为 pop_accompaniments.java 中的参数,但是当我在第一步单击“ASSORTED CONDIMENTS”按钮时,或者如果我只是启动应用程序,它就会崩溃。

此外,如果我在“pop_accompaniments.xml”的同一活动中创建按钮,同时从“pop_accompaniments.java”调用 button_creator 方法,则按钮创建得很好>”。

但我希望它们显示在 CART 活动中,而不是 ACCOMPANIMENTS 活动中。

【问题讨论】:

    标签: java android-studio android-layout android-studio-3.0 instance-variables


    【解决方案1】:

    我猜你需要在活动 pop_cart.java 处于前台时创建按钮。 那么为什么不直接执行pop_cart.java的onCreate()中的按钮代码呢?

    如果您希望 pop_accompaniments.java 中的某些内容决定是否创建按钮,您可以通过意图将 pop_accompaniments.java 中的布尔值传递给 pop_cart.java!

    在pop_accompaniments.java中:

    Intent intent = new Intent(this, pop_cart.class);
    intent.putExtra("someBool", true);
    

    在pop_cart.java中:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    Boolean bool = getIntent().getExtras().getBoolean("someBool");
    
    //Now you can check if the bool is true or false
    if(bool){
        //Execute button code here
    }
    }
    

    【讨论】:

    • 没有仍然存在相同的错误。该应用程序一启动就崩溃。它甚至没有打开。我已经检查过了,我的代码中没有其他错误表明 android studio 我的高亮显示为红色甚至黄色警告。
    • 能否请您在运行应用程序时分享日志?这样我才能更好地帮助你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    相关资源
    最近更新 更多