在Android中调用公共类

时间:2019-06-28 20:27:58

标签: android class public

我对android并不是那么陌生,但是我从来没有走过学习语言的标准途径,因此意识到我的基本知识有些空白。我需要创建一个自定义吐司,我想从任何其他活动或片段中调用它,但是我需要传递背景色,文本和图像。这是我的公开课:

public class ShowToast{

    public ShowToast (View viewParent, Context context, int icon, String text, int color) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
        View view = inflater.inflate(R.layout.toast_delete_mealplan, (ViewGroup) viewParent.findViewById(R.id.toast_root_error));

        ImageView image = view.findViewById(R.id.toast_image);
        image.setImageResource(icon);
        TextView message = view.findViewById(R.id.text);
        message.setText(text);

        view.setBackgroundColor(color);

        Toast toast = new Toast(context);
        toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
        toast.setDuration(Toast.LENGTH_LONG);
        toast.setView(view);
        toast.show();
    }
}

这是XML:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    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:background="@drawable/background_toast"
    android:layout_gravity="center"
    android:paddingHorizontal="4dp"
    android:paddingVertical="2dp"
    android:id="@+id/toast_root">

    <ImageView
        android:id="@+id/toast_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginEnd="2dp"
        android:layout_marginTop="4dp"
        android:src="@drawable/icon_shopping_cart"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/toast_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="4dp"
        android:layout_marginTop="4dp"
        android:layout_marginEnd="16dp"
        android:text="Added to Cart: Swipe up to see details"
        android:textSize="16sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/toast_image"
        app:layout_constraintTop_toTopOf="parent" />


</android.support.constraint.ConstraintLayout>

首先,这是构造类的正确方法吗?我该如何从活动或片段中调用该方法?谢谢。

3 个答案:

答案 0 :(得分:0)

不。这是一个构造函数,它创建一个类的实例。您不想创建类的实例,而只想调用一个函数。因此,您将创建一个包含该代码的公共静态函数,并通过调用ClassName.functionName(param1, param2, param3...)

对其进行调用

基本上,静态函数是不需要调用类实例的函数,可以直接调用它。您无法在此类函数中访问实例变量/方法,但可以访问同一类上的其他静态变量/方法。

答案 1 :(得分:0)

这对于类或构造函数没有意义。

如果您想在代码中的任何地方干面包,则只需要Context

Toast.makeText(mContext, "Message", Toast.LENGTH_SHORT).show();

您可以定义一个静态方法,但我认为这没有用:

public static void toast(Context ctx, String msg) {
    Toast.makeText(ctx, msg, Toast.LENGTH_SHORT).show();
}

答案 2 :(得分:0)

有两种方法可以调用外部类的函数。

在这里,您必须具有公共修饰符。 (公共课)。

1。 className.funstionName(argument1,argument2,...,argumentn);

2。 ClassName classVariable = new ClassName(); //内存分配。

classVariable.functionName(argument1,argument2,...,argumentn);

在您的情况下,您确实在构造函数中传递了上下文类的对象,并且您也想从片段和活动中调用此方法。

通过活动进行呼叫:

ClassName classVariable=new ClassName(view,this,icon,color,text);

通过片段调用:

ClassName classVariable=new ClassName(view,getActivity(),icon,color,text);