Android スマートデバイス用のユーザーコントロールは数ステップで作成できますが、以下の点に注意しながら作業を進めてください。
- GeneXus でコントロール定義を作成し、ツールボックスで使用できるようにします。
- ターゲットプラットフォームにコントロールを実装します。そのためには、Android Studio プロジェクトを作成する必要があります。
- GeneXus のコントロール定義をターゲット実装に対応付けるライブラリ定義を作成します。
以降の手順に従ってください。
「スマートデバイス用ユーザーコントロール定義の作成」で解説している手順に従って、スマートデバイス用のユーザーコントロール定義を作成してください。
/install オプションを指定して GeneXus を実行し、 [ エクステンションマネージャ ] ダイアログにユーザーコントロール定義が表示されるようにします。
スマート デバイス オブジェクトを作成し、項目属性または変数を新しいユーザーコントロール定義にバインドして、モデルを生成します。
アプリケーションが Android エミュレーターにデプロイされます。この段階で、Android プラットフォームにユーザーコントロールを実装する必要があります。
実際の作業方法や、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
- ベースクラスをデプロイします。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_1 や simple_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 で使用されるローカルリポジトリに実装をアップロードしてください。 準備が完了したら実行してください。
GeneXus のコントロール定義をターゲット実装に対応付けるライブラリ定義を作成します。
実用情報
|