我对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>
首先,这是构造类的正确方法吗?我该如何从活动或片段中调用该方法?谢谢。
答案 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);