برنامه نویسی

توسعه Hongmeng: OpenCustomDialog گفتگوی مشخص شده را می بندد

مقدمه

این مقاله بر اساس API13 است

OpenCustomDialog محدودیت های زیادی را در استفاده از CustomDialogController ایجاد می کند و می تواند در هر موقعیتی ظاهر شود ، که می توان گفت بسیار راحت است. با این حال ، هنگام استفاده از آن ، من با برخی موانع جزئی روبرو شدم ، مانند چندین پنجره ممکن است در یک صفحه وجود داشته باشد و ترتیب پنهان این پنجره ها نامشخص است. چگونه می توانم پنجره های مربوطه را با توجه به شرایط خاص مخفی کنم ، یعنی نحوه مخفی کردن پنجره های مشخص به جای پنجره های برتر.

در حال حاضر ، دو روش پیاده سازی وجود دارد ، یکی با ذخیره ComponentContent و دیگری برای ذخیره دیالوگ. بنابراین ، در این مقاله نمونه هایی از این دو روش اجرای یک به یک را ارائه خواهیم داد.

اجرای مؤلفه ذخیره سازی ، گفتگوی مشخص شده را می بندد

ما می دانیم که وقتی OpenCustomDialog ، یک مؤلفه Content دریافت می شود و از این ComponentContent هنگام بستن پنجره بازشو استفاده می شود. بنابراین ، ما می توانیم یک ذخیره ساده از ComponentContent ایجاد کنیم. ذخیره سازی در اینجا برای ادامه توصیه نمی شود. از این گذشته ، به طور کلی در یک صفحه انجام می شود. حتی اگر در همان صفحه نباشد ، می توانیم از ذخیره سازی متغیر جهانی استفاده کنیم. چگونه می توان مؤلفه ذخیره شده را پیدا کرد؟ ، در اینجا توصیه می کنیم از HashMap استفاده کنید ، جفت های ارزش کلیدی به این شکل ذخیره می شوند که می توان به راحتی برای یافتن مقدار مربوطه با استفاده از کلید استفاده کرد.

گفتگوی بازشو

پس از ظاهر شدن پنجره پاپ آپ ، از مجموعه نقشه برای ذخیره سازی استفاده کنید. هنگامی که گفتگوی پدیدار شد ، یک آرم باید منتقل شود ، که این کلید مربوط به گفتگو است.

 private showDialog(key: string) {
    let uiContext = this.getUIContext()
    let promptAction = uiContext.getPromptAction()
    let contentNode = new ComponentContent(uiContext, wrapBuilder(TextDialog))
    promptAction.openCustomDialog(contentNode).then(() => {
      //临时存储
      this.mCustomDialogMap.set(key, contentNode)
    })
  }

مخفی کردن گفتگوی

هنگام مخفی کردن ، فقط کلید مربوطه را مستقیماً منتقل کنید. به یاد داشته باشید که عناصر موجود در نقشه را پس از پنهان کردن حذف کنید.

private hideDialog(key: string) {
    if (this.mCustomDialogMap.hasKey(key)) {
      let uiContext = this.getUIContext()
      let promptAction = uiContext.getPromptAction()
      let contentNode = this.mCustomDialogMap.get(key)
      promptAction.closeCustomDialog(contentNode).then(() => {
        //隐藏之后删除
        this.mCustomDialogMap.remove(key)
      })
    }
  }

اجرای گفتگوی ذخیره سازی گفتگوی مشخص شده را می بندد

منطق ذخیره دیالوگ و ذخیره سازی مؤلفه در اصل یکسان است ، اما روش نمایش UI باید تغییر یابد. از آنجا که دستیابی به دیالوگ باید از طریق سازنده باشد ، در اینجا ، مؤلفه Content به تعریف داخلی Builder تغییر می یابد. اگر می خواهید از مؤلفه جهانی UI استفاده کنید ، می توانید این کار را در سازنده تعریف شده انجام دهید.

گفتگوی بازشو

private showDialog(key: string) {
    let uiContext = this.getUIContext()
    let promptAction = uiContext.getPromptAction()
    promptAction.openCustomDialog({
      builder: () => {
        this.TextDialog(message)
      }
    }).then((dialogId: number) => {
      this.mCustomDialogMap.set(key, dialogId)
    })
  }

مخفی کردن گفتگوی

private hideDialog(key: string) {
    if (this.mCustomDialogMap.hasKey(key)) {
      let uiContext = this.getUIContext()
      let promptAction = uiContext.getPromptAction()
      let dialogId = this.mCustomDialogMap.get(key)
      promptAction.closeCustomDialog(dialogId)
      //隐藏之后删除
      this.mCustomDialogMap.remove(key)
    }
  }

خلاصه مرتبط

موارد فوق دو روش برای پنهان کردن گفتگوی مشخص شده است. نسبتاً ساده است. سناریوی خاص متداول است که در آن چندین گفتگوی در صفحه ظاهر می شود ، اما صحنه گفتگوی مشخص شده باید پنهان شود. البته ، برای سناریوهای معمولی معمولی نیز مناسب است.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا