インタラクターの作成

インタラクターの作成

ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、こちらまでご連絡ください。

Interactorsがサーバー呼び出しの結果を取得して処理する基本的なスクリーンレット作成チュートリアル を

から思い出してください。 また、次のコンポーネントがインタラクターを構成することを思い出してください。

  1. イベント
  2. リスナー
  3. インタラクタークラス

これらのコンポーネントは、非リストスクリーンレットと同じ基本機能をリストスクリーンレットで実行します。 ただし、それらの作成は少し異なります。 以下の各セクションでは、これらのコンポーネントの1つを作成する方法を示します。 最初に、イベントを作成します。

イベントを作成する

Screensは、 EventBus ライブラリを使用して、スクリーンレット内の通信を処理します。 したがって、スクリーンレットコンポーネントは、サーバー呼び出しの結果を含むイベントクラスを使用して相互に通信します。 あなたのリストScreenletのイベントクラスを拡張する必要があります ListEvent クラス モデルクラスでパラメータを。 イベントクラスには、モデルクラスのプライベートインスタンス変数、この変数を設定するコンストラクター、スーパークラスコンストラクターを呼び出す引数なしのコンストラクターも含める必要があります。 たとえば、ブックマークリストスクリーンレットのイベントクラス(BookmarkEvent)は、 ブックマーク オブジェクトを通信します。 したがって、型引数として ブックマーク を使用して ListEvent を拡張し、その BookmarkEvent(Bookmark bookmark) コンストラクターが設定するプライベート Bookmark 変数を定義します。

public class BookmarkEvent extends ListEvent<Bookmark> {

      private Bookmark bookmark;

      public BookmarkEvent() {
            super();
      }

      public BookmarkEvent(Bookmark bookmark) {
          this.bookmark = bookmark;
      }
    ...

また、イベントクラスに ListEventの抽象メソッドを実装する必要があります。 これらのメソッドは オフラインモードサポートすることに注意してください。 ここではこれらの方法について簡単に説明しますが、スクリーンレットでのオフラインモードのサポートについては、別のチュートリアルで詳しく説明します。

  • getListKey:キャッシュのIDを返します。 このIDは通常、各リスト行に表示されるデータです。 たとえば、 BookmarkEventgetListKey メソッドは、ブックマークのURLを返します。

      @Override
      public String getListKey() {
          return bookmark.getUrl();
      }
    
  • getModel:モデルクラスインスタンスを返すことにより、モデルエンティティをキャッシュにラップ解除します。 たとえば、 BookmarkEvent メソッドの getModel メソッドは、ブックマークを返します。

      @Override
      public Bookmark getModel() {
          return bookmark;
      }
    

次に、スクリーンレットのリスナーを作成します。

リスナーの作成

アプリ開発者は、リスナーを使用して、スクリーンレットで発生するイベントに応答できることを思い出してください。 たとえば、アクティビティでLogin Screenletを使用するアプリ開発者は、ログインの成功または失敗に応答するために、そのアクティビティに LoginListener を実装する必要があります。 ただし、リストScreenletを作成する場合、別個のリスナーを作成する必要はありません。 開発者が実装することによって、活性またはそのフラグメントにリストScreenletを使用することができ BaseListListener インターフェース モデルクラスにパラメータ化。 たとえば、アクティビティでブックマークリストスクリーンレットを使用する場合、アプリ開発者のアクティビティ宣言は次のようになります。

public class BookmarkListActivity extends AppCompatActivity 
    implements BaseListListener<Bookmark> {...

BaseListListener インターフェイスは、アプリ開発者がアクティビティまたはフラグメントに実装できる次のメソッドを定義します。

  • void onListPageFailed(int startRow、Exception e):サーバーからエンティティを取得するスクリーンレットの失敗に応答します。

  • void onListPageReceived(int startRow、int endRow、List<E> エントリ、int rowCount):サーバーからエンティティを取得するスクリーンレットの成功に応答します。

  • void onListItemSelected(E element、View view):リスト内のユーザー選択に応答します。

これらのメソッドがリストスクリーンレットのニーズを満たしている場合、このチュートリアルの次のセクションに進むことができます。 ただし、アプリ開発者がより多くのアクションに応答できるようにする場合は、モデルクラスでパラメーター化された BaseListListener を拡張する独自のリスナーを作成する必要があります。 たとえば、ブックマークリストスクリーンレットには次のようなリスナーが含まれています: BookmarkListListener。 このリスナーは、Interactorが呼び出されたときにアプリ開発者に通知する単一のメソッドを定義します。

public interface BookmarkListListener extends BaseListListener<Bookmark> {
    void interactorCalled();
}

次に、Interactorクラスを作成します。

インタラクタークラスの作成

Interactorクラスは、Interactorの中心的なコンポーネントとして、Liferay DXPからエンティティを取得するサービス呼び出しを行い、その呼び出しの結果を処理することを思い出してください。 リストScreenletフレームワークの BaseListInteractor クラス は、リストScreenletのInteractorクラスが必要とするほとんどの機能を提供します。 ただし、 BaseListInteractor を拡張して、サービスを呼び出し、モデルおよびイベントクラスを介して結果を処理する必要があります。 したがって、Interactorクラスは、 BaseListInteractorListener<YourModelClass> とイベントクラスでパラメーター化された BaseListInteractor拡張する必要があります。 たとえば、ブックマークリストスクリーンレットのInteractorクラス BookmarkListInteractorBaseListInteractorListener<Bookmark> および BookmarkEventパラメーター化された BaseListInteractor 拡張します。

public class BookmarkListInteractor extends 
    BaseListInteractor<BaseListInteractorListener<Bookmark>, BookmarkEvent> {...

Interactorは、サーバーを呼び出して結果を処理するために必要なメソッドもオーバーライドする必要があります。

  • getPageRowsRequest:指定されたエンティティのページを取得します。 例 BookmarkListInteractorでは、このメソッドは最初に args パラメーターを使用して、ブックマークを取得するフォルダーのIDを取得します。 次に、アプリ開発者がフラグメントまたはアクティビティにScreenlet XMLを挿入するときにコンパレーターを設定する場合、コンパレーターを設定します(これについては後ほど説明します)。 getPageRowsRequest メソッドは、 BookmarksEntryServicegetEntries メソッドを呼び出してブックマークのページを取得することで終了します。 サービスコールは、中にサービスコールのようなことを注意 基本Screenlet作成チュートリアル、使用して LiferayServerContext.isLiferay7を() 必ず正しいサービスインスタンスが使用されていることを確認するためのポータルのバージョンを確認します。 1つのポータルバージョンでのみスクリーンレットを使用する場合、これは必要ありません。 また、サービス呼び出しを行うために使用される groupId 変数は、 getPageRowsRequest または BookmarkListInteractorどこにも設定されていないことに注意してください。 BookmarkListInteractorように、 BaseListInteractorを拡張するインタラクターは、Screensフレームワークを介してこの変数を継承します。 Screenletクラスを作成するときに設定します。 以下は BookmarkListInteractorの完全な getPageRowsRequest メソッドです。

      @Override
      protected JSONArray getPageRowsRequest(Query query, Object... args) throws Exception {
          long folderId = (long) args[0];
    
          if (args[1] != null) {
              query.setComparator((String) args[1]);
          }
    
          if (LiferayServerContext.isLiferay7()) {
              return new BookmarksEntryService(getSession()).getEntries(groupId, folderId, 
                  query.getStartRow(), query.getEndRow(), query.getComparatorJSONWrapper());
          } else {
              return new com.liferay.mobile.android.v62.bookmarksentry.BookmarksEntryService(
                  getSession()).getEntries(groupId, folderId, query.getStartRow(), 
                  query.getEndRow(), query.getComparatorJSONWrapper());
          }
      }
    

コンパレータとは何かを自問しているかもしれません。 コンパレータは、ポートレットのエンティティをソートするLiferay DXPインスタンス内のクラスです。 たとえば、ブックマークポートレットには、さまざまな基準でエンティティをソートできる複数のコンパレータが含まれています。 これらのコンパレータを表示するには、 をクリックしてください。 必須ではありませんが、リストスクリーンレットを作成して、コンパレータを使用してエンティティを並べ替えることができます。 ブックマークリストスクリーンレットはコンパレータをサポートしているため、このチュートリアルを進めていくと、さらに多くのことがわかります。

  • getPageRowCountRequest:エンティティの数を取得して、ページネーションを有効にします。 例 BookmarkListInteractorでは、このメソッドは最初に args パラメーターを使用して、ブックマークをカウントするフォルダーのIDを取得します。 BookmarksEntryServicegetEntriesCount メソッドを呼び出して、ブックマークの数を取得します。

      @Override
      protected Integer getPageRowCountRequest(Object... args) throws Exception {
          long folderId = (long) args[0];
    
          if (LiferayServerContext.isLiferay7()) {
              return new BookmarksEntryService(getSession()).getEntriesCount(groupId, folderId);
          } else {
              return new com.liferay.mobile.android.v62.bookmarksentry.BookmarksEntryService(
                  getSession()).getEntriesCount(groupId, folderId);
          }
      }
    
  • createEntity:サーバー呼び出しの結果を含むイベントのインスタンスを返します。 このメソッドは、結果を Map<String, Object>として受け取り、モデルクラスのインスタンス化に使用します。 次に、このモデルインスタンスを使用してイベントオブジェクトを作成します。 例 BookmarkListInteractorでは、このメソッドは Map<String, Object>Bookmark コンストラクターに渡します。 次に、結果の Bookmark を使用して、 BookmarkEventを作成して返します。

      @Override
      protected BookmarkEvent createEntity(Map<String, Object> stringObjectMap) {
          Bookmark bookmark = new Bookmark(stringObjectMap);
          return new BookmarkEvent(bookmark);
      }
    
  • getIdFromArgs:最初のオブジェクト引数の値を文字列として返すボイラープレートメソッド。 これは、 オフラインモードキャッシュキーとして機能します。

      @Override
      protected String getIdFromArgs(Object... args) {
          return String.valueOf(args[0]);
      }
    

Screenletでオフラインモードをサポートする予定がない場合でも、このメソッドを実装する必要があります。 Interactorクラスにこのメソッドがあると、後でオフラインモード機能を簡単に追加できます。 スクリーンレットでのオフラインモードのサポートについては、別のチュートリアルで詳しく説明します。

完全な BookmarkListInteractor クラスを表示するには、 ここをクリック

次に、Screenletクラスを作成します。

関連トピック

モデルクラスの作成

ビューを作成する

スクリーンレットクラスの作成

« ビューを作成するスクリーンレットクラスの作成 »
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています