簡體   English   中英

如何使用 java 代碼而不是 xml 代碼將按鈕添加到 android 工作室中的另一個活動

[英]How do I add button to another activity in android studio using java code rather than xml code

我想使用 Z93F725A07423FE1C889F448B33D2 代碼從 1 個活動 -“ pop_accompaniments.xml ”添加一個按鈕到另一個活動 -“ pop_cart.xml ”。 For this I created an instance of the class " pop_cart.java " in " pop_accompaniments.java ", to call the func - "cart_button_creator" which is in " 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;
    }
}

抱歉這么長的代碼,但我已經嘗試了幾乎所有可能的方法來從另一個 class 的實例調用函數,以不同的方式傳遞變量,嘗試將整個變量生成器調用為 function 並且只傳遞視圖 v作為 pop_accompaniments.java 中的一個參數,但是當我在第一步單擊“ASSORTED CONDIMENTS”按鈕時,或者如果我只是啟動應用程序,應用程序就會崩潰。

此外,如果我在從“ pop_accompaniments.java ”調用 button_creator 方法的同時在“ pop_accompaniments.xml ”的同一活動中創建按鈕,則這些按鈕創建得很好。

但我希望他們顯示在 CART 活動中,而不是 ACCOMPANIMENTS 活動中。

我猜您需要在活動 pop_cart.java 處於前台時創建按鈕。 那么為什么不直接執行pop_cart.java的onCreate()中的按鈕代碼呢?

You can pass a boolean from pop_accompaniments.java to pop_cart.java via an intent if you want something in pop_accompaniments.java to decide whether the button will be created or not!

在 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
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM