最近のアクセス:
Android 用ユーザーコントロールの作成

Android スマートデバイス用のユーザーコントロールは数ステップで作成できますが、以下の点に注意しながら作業を進めてください。
  1. GeneXus でコントロール定義を作成し、ツールボックスで使用できるようにします。
  2. ターゲットプラットフォームにコントロールを実装します。そのためには、Android Studio プロジェクトを作成する必要があります。
  3. GeneXus のコントロール定義をターゲット実装に対応付けるライブラリ定義を作成します。
以降の手順に従ってください。

1.GeneXus でのコントロール定義

スマートデバイス用ユーザーコントロール定義の作成」で解説している手順に従って、スマートデバイス用のユーザーコントロール定義を作成してください。
/install オプションを指定して GeneXus を実行し、 [ エクステンションマネージャ ] ダイアログにユーザーコントロール定義が表示されるようにします。
スマート デバイス オブジェクトを作成し、項目属性または変数を新しいユーザーコントロール定義にバインドして、モデルを生成します。
アプリケーションが Android エミュレーターにデプロイされます。この段階で、Android プラットフォームにユーザーコントロールを実装する必要があります。

2.ターゲットプラットフォームへのコントロールの実装

実際の作業方法や、Android フレームワークの概要については、チュートリアルを参考にしてください。以下のようなチュートリアルが用意されています:
既存のサンプルを基に開始する場合は、このリポジトリをチェックしてください。
スマートデバイス用のユーザーコントロールには 2 種類あります: アイテムおよびリスト

アイテム ユーザー コントロール

  • ベースクラスをデプロイします。android.widget.* のクラスはこのベースクラスから派生します。
  • このクラスは、com.artech.controls パッケージから IGxEdit インターフェースを実装する必要があります。つまり、以下のメソッドをオーバーライドします:
    • String getGx_Value(): コントロールに関連付けられている値を文字列形式で返します。
    • void setGx_Value(String value): コントロールに関連付ける値を設定します。
    • String getGx_Tag(): [ Tag ] プロパティを文字列として返します。通常は、return (String)this.getTag(); となります。
    • void setGx_Tag(String tag): [ Tag ] プロパティを文字列として設定します。通常は、this.setTag(stringData); となります。
    • void setValueFromIntent(Intent data): ユーザーコントロールにピッカーコントロールを実装する場合は、このメソッドを実装します。
    • void setEnabled(boolean enabled): コントロールのステータスを有効 (Enabled) に設定します。
    • IGxEdit getListControl(): コントロールの参照を返します。既定の実装は、オブジェクト自体を返します。
    • IGxEdit getViewControl(): ビューコントロールの参照を返します。既定の実装は、オブジェクト自体を返します。
    • IGxEdit getEditControl(): 編集時に使用するコントロールを返します。既定の実装は、オブジェクト自体を返します。
学習のため、FlexibleClient の com.artech.controls パッケージと com.artech.extendedcontrols パッケージの以下のクラスについて確認してください。GeneXus のすべて標準コントロールは内部的にユーザーコントロールとして作成されます:
  • GxButton
  • RadioGroupControl
  • GxCheckBox
  • GxDateTimePicker
  • GxEditText
  • GxImage
  • GxTextView
  • SpinnerControl
  • DynamicSpinnerControl
  • SeekBarControl
  • ScannerControl
  • RatingControl
  • GxWheelControl
  • GxMeasuresControl
  • GxSDGeoLocation

List ユーザーコントロール

  • ベースクラスをデプロイします。android.widget.* のクラスはこのベースクラスから派生します。
  • このクラスは、com.artech.controls パッケージから IGridView インターフェースを実装する必要があります。
  • つまり、以下のメソッドをオーバーライドし、GridEventsListener インターフェースを実装します (データをリクエストするためのイベントハンドラー、既定のアクションとボタン):
    • void addListener(GridEventsListener listener): 特定のイベントに応答するために使用するユーザー コントロール リスナーを定義します。
    • void update(ViewData data): ユーザーコントロールに、指定されたデータを挿入します。
    • public void requestMoreData(): 追加のデータをリクエストする際に使用します (スクロール時など)。
    • public boolean runAction(UIContext context, ActionDefinition action, Entity entity): グリッドアイテムに関連付けられているアクションを実行します。
    • public boolean runDefaultAction(UIContext context, Entity entity): グリッドに対する既定のアクションを実行します。
  • com.artech.controls.grids パッケージの GridHelper クラスを使用できます。このパッケージには、グリッドコントロール用の共通機能が揃っています。
  • ユーザー コントロール コンストラクターを引数 (Context context, LayoutItemDefinition def) を指定して実行する場合は、以下のようにレイアウトをインフレートする必要があります:
LayoutInflater inflater = LayoutInflater.from(context);
     if (inflater != null)
        inflater.inflate(com.artech.R.layout.myusercontrol_layout, this, true);
  • myusercontrol_layout.xml ファイルに、リストの表示レイアウトを記述します (XML マークアップ)。
  • コントロールに定義されているプロパティを操作する場合は、ControlInfo クラス (com.artech.base.metadata.layout パッケージ) のヘルパーメソッドを使用できます:
ControlInfo info = layoutItemDefinition.getControlInfo();
controlItemValues = info.optStringProperty("@ControlItemValues"); //$NON-NLS-1$
controlItemDescription = info.optStringProperty("@ControlItemDescription"); //$NON-NLS-1$
addEmptyItem = info.optBooleanProperty("@AddEmptyItem");   //$NON-NLS-1$
emptyItemText = info.getTranslatedProperty("@EmptyItemText"); //$NON-NLS-1$
  • コントロールに応じて、BaseAdapter クラスを特化させ、View にデータを読み込みます。Adapter オブジェクトは、AdapterView と、そのビューに表示するデータとの間のブリッジとして機能します。Adapter は、データアイテムへのアクセスを司ります。また、データセット内の各アイテムに合わせてビューを作成します。
    各行のインフレート方法を定義するため、BaseAdapter から継承したカスタムアダプターに getView を実装します。BaseAdapter は、Android に既定で用意されている simple_list_item_1simple_list_item_2 以外のリストを使用したい場合には必須です。以下のメソッドを実装することにより、リストの反復処理方法を定義する必要があります:
    • public int getCount()
    • public Object getItem(int position)
    • public long getItemId(int position)
  • getView メソッドを定義します。カスタムビューのインフレート方法を記述し、基本的にはデータ構造 (UserControlName クラス) のデータをビュー (UserControlNameView クラス) にバインドします。
    • public View getView(final int position, View convertView, ViewGroup parent)
学習の目的で、FlexibleClient の com.artech.controls パッケージ、com.artech.controls.grid パッケージ、および com.extensions.controls パッケージの以下のクラスを確認してください:
  • ImageGallery
  • GxMapView
  • GxMagazineViewer
  • GxViewPager
終了したら、必ず gradlew uploadArchives を実行して、GeneXus で使用されるローカルリポジトリに実装をアップロードしてください。  準備が完了したら実行してください。

3.ライブラリの作成

GeneXus のコントロール定義をターゲット実装に対応付けるライブラリ定義を作成します。

実用情報





サブページ
Created: 14/09/18 03:12 by Admin Last update: 21/05/20 01:53 by Admin
カテゴリ
Powered by GXwiki 3.0