Вызов публичного класса в Android - PullRequest
0 голосов
/ 28 июня 2019

Я не новичок в 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 голосов
/ 28 июня 2019

Это не имеет смысла как класс или конструктор.

Если вы хотите сделать тост из любого места в вашем коде, вам просто нужно 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();
}
0 голосов
/ 28 июня 2019

Есть два способа вызвать функцию внешнего класса.

Здесь у вас должен быть встроенный модификатор как public.(Открытый класс).

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

2. ClassName classVariable = new ClassName(); // Распределение памяти.

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

В вашем случае вы передали объект класса контекста в конструктор, а также хотите вызвать этот метод из фрагмента и действия.

Вызовом из Activity :

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

Позвонив с Фрагмент :

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

0 голосов
/ 28 июня 2019

Нет. Это конструктор, он создает экземпляр класса. Вы не хотите создавать экземпляр класса, вы просто хотите вызвать функцию. Таким образом, вы должны создать публичную статическую функцию с этим кодом и вызывать ее, вызывая ClassName.functionName(param1, param2, param3...)

По сути, статическая функция - это функция, которая не нуждается в экземпляре класса для вызова, ее можно просто вызвать. Вы не можете получить доступ к переменным / методам экземпляра в такой функции, но вы можете получить доступ к другим статическим переменным / методам в том же классе.

...