更改自定义 AlertDialog 中的布局元素属性 Class

Changing layout element attributes in Custom AlertDialog Class

所以我正在构建一个非常基本的应用程序。我正在使用警告对话框向用户显示他们是否赢了。我所做的是我创建了这个 class :

public class WinLoseDialog {
  Activity activity;
  AlertDialog dialog;
  TextView text;

  public WinLoseDialog(Activity activity) {
        this.activity = activity;
  }

  public void startDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(activity);
        LayoutInflater inflater = activity.getLayoutInflater();
        builder.setView(inflater.inflate(R.layout.win_lose_layout, null));
        builder.setCancelable(false);
        
        dialog = builder.create();
        dialog.show();
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
  }

  public void dismissDialog() {
        dialog.dismiss();
  }

}

我想做的是使这个 class 尽可能可重用。对于我的所有游戏片段,我希望能够将其用于警告对话框,以防用户获胜或失败。

为此,我需要能够更改 textView 上的文本,定义如下(在 win_lose_layout 中):

<TextView
            android:id="@+id/alertText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@style/alertDialogText"
            tools:text="hi" />

我的 lottie 视图的 原始分辨率 定义为(在 win_lose_layout 中):

<com.airbnb.lottie.LottieAnimationView
            android:id="@+id/lottie"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_gravity="center_horizontal"
            android:layout_margin="10dp"
            app:lottie_autoPlay="true" />

而且我需要才能从我使用此 WinLoseDialog class.

的片段 中更改以上两个

我坚持的事情 是我如何在其中使用 findViewById 之类的东西,以便我能够在我的 class 中附加 TextView 对象到 win_lose_layout 中的那个,这样我就可以为文本 (TextView) 创建一个 setter 并在我的片段中使用它。同样对于 lottie View

您必须像这样更改这 2 个视图。

public class WinLoseDialog {
  Activity activity;
  AlertDialog dialog;
  TextView text;
  LottieAnimationView lottieView;

  public WinLoseDialog(Activity activity) {
        this.activity = activity;
  }

  public WinLoseDialog startDialog(String textStr, String lottieFilePath) {
        AlertDialog.Builder builder = new AlertDialog.Builder(activity);
        LayoutInflater inflater = activity.getLayoutInflater();
        View view = inflater.inflate(R.layout.win_lose_layout, null);
        builder.setView(view);
        builder.setCancelable(false);

        text = view.findViewById(R.id.alertText);
        lottieView = view.findViewById(R.id.lottie);
        
        //You can update your text & Lottie animation view here with the new string and new Lottie path you got from arguments.

        if (!TextUtils.isEmpty(textStr))
            text.settext(textStr);
        if (!TextUtils.isEmpty(lottieFilePath))
            //Set your animation file path here.

        dialog = builder.create();
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

    return this;
  }

  public void dismissDialog() {
        dialog.dismiss();
  }
}

现在,当您想在不进行更改的情况下起诉对话框时,只需:

WinLoseDialog dialog = new WinLoseDialog(activity);
dialog.startDialog(null, null);
dialog.show()

有了变化:

WinLoseDialog dialog = new WinLoseDialog(activity);
dialog.startDialog("This is new Text", lottiePath);
dialog.show()