マルチデバイス開発(Android)でListViewへの表示について

解決


ガオー  2020-11-06 04:55:41  No: 149317  IP: 192.*.*.*

いつも大変お世話になっています。
マルチデバイスを開発(Android)をしています。
複数行のデータ(カラム数3)をLsitViewに表示させたいのですが
Windowsアプリでは以下のようなコードで表示できていたのですが
マルチデバイスではできませんでした。
色々と試しているのですが、出来ません。
アドバイスいただけませんでしょうか。
よろしくお願いいたします。

Windowsアプリコード
*************************
      with DataSource1.DataSet do
      begin
        if RecordCount > 0 then
        begin
          ListView1.Clear;
          First;
          while (not Eof) do
          begin
            item := ListView1.Items.Add;
            item.Caption := Fields[0].AsString;
            item.SubItems.Add(Fields[3].AsString);
            item.SubItems.Add(Fields[11].AsString);
            Next;
          end;
        end
        else
        begin
          ShowMessage('当該データは存在しません!');
          Exit;
        end;
      end;

Delphi Berlin Enterprise
Windows 10 PRO 64bit

編集 削除
igy  2020-11-06 12:51:46  No: 149319  IP: 192.*.*.*

同じ名前のビジュアルコンポーネントでも、VCLとFMXでは互換性がないケースが多いような・・

編集 削除
ガオー  2020-11-08 14:53:35  No: 149320  IP: 192.*.*.*

igyさんお返事ありがとうございます。
3日間、色々やってみたのですが、
FireMonkeyのListViewはカラム数を2つ以上にできませんでした。
その他のコンポーネントでできるかなと調べていたところ
StringGridで複数のカラムをセットできました。
しかし、選択行の取得ができず、
VCLではOnClikイベントでStringGrid.Rowから選択行が取得できるのですが
FireMonkeyではOnClikイベントがなく
OnSelectCellイベントでStringGrid.Rowで確認したのですが
なんか変な値になっており使えませんでした。
選択行の情報を得る方法がなく
とん挫してしまいました。
FireMonkeyは難しいです。
何かいい方法はないでしょうか。

編集 削除
igy  2020-11-09 11:08:05  No: 149322  IP: 192.*.*.*

> OnSelectCellイベントでStringGrid.Rowで確認したのですが
> なんか変な値になっており使えませんでした。 

別の方の質問の
TEditでTABキーを押してもフォーカスが移動しません
https://www.petitmonte.com/bbs/answers?question_id=29796
で、HFUKUSHIさんが、
> 上にも書きましたけど、FMXで最新版を使わない理由はない(VCLなら古いバージョンもありですが)ので、
> 可能であれば最新版(10.3.3とか10.4.1)に移行してしまうのがよいと思います。
と書かれていますし、
(別のPCとかお持ちであれば)試しにCommunity Editionで動作を確認してみるとかは、いかがですか?

編集 削除
ガオー  2020-11-14 09:09:22  No: 149350  IP: 192.*.*.*

igyさん、いつもありがとうございます。
残念ですが。断念しました。
VCLで出来てFMXではできないことが沢山あり
戸惑っています。
また、しばらく悩む日々が続きそうです。
今後ともよろしくお願いいたします。

編集 削除
はくちゃん  2020-11-24 10:04:19  No: 149408  IP: 192.*.*.*

たとえばデータベースの各フィールドの内容をfmxのlistview上にdbgridの様に表示したいのでしょうか?

編集 削除
ガオー  2020-11-24 20:07:24  No: 149410  IP: 192.*.*.*

はくちゃんさん、お返事ありがとうございます。
おっしゃる通りFMXでListViewのカラムに
指定のフィールドを配置して、
ユーザーがクリックした
レコードにあるフィールド情報を取得したいのですが。

編集 削除
はくちゃん  2020-11-25 01:53:58  No: 149411  IP: 192.*.*.*

以下を先にお試しいただけますか?(こちらはdelphi 10.3.3 community edition 環境です!他のバージョンでの動作は確認していません!!)  

1.新規作成->マルチディバイスアプリ->空のアプリケーション
2.Android32ビット, ビューはターゲットスマートフォンのサイズ にセット
3.パレットからTLISTVIEWを選択貼り付け。 Align は "Client"を選択
4.[構造]ビューから、listview1->Itemappearance->item へと展開
5."Item" を右クリック ”デザインモードの切り替え" を選択
6.オブジェクトインスペクターのappearanceをListItemからDynamicAppearanceへ変更
7.item下位のText1をクリック、上位itemを再度クリック
8.オブジェクトインスペクターの ”新規追加  > "をクリックして ”TTextbjectAppearance”を選択。 ビューに項目が追加されるはずですので
  いくつか追加してみてください。各itemのサイズや位置はマウスでレイアウト変更可能です。

以上ですが、
すでにご確認済みでしたら無視してください。
 

編集 削除
ガオー  2020-12-01 10:08:28  No: 149427  IP: 192.*.*.*

はくちゃんさん、アドバイスありがとうございます。
書き込みしてくださっていたのを
気づきませんでした。
「項目Text」の追加は出来たのですが
追加した項目に任意のテキストを
表示するコードがわかりませんでした。
今までは
ListView1.Item.Add.Text := '項目1' ;
というように表示したい文字をコーディングして
いたのですが、これでは駄目なのでしょうか。

編集 削除
はくちゃん  2020-12-02 03:48:30  No: 149432  IP: 192.*.*.*

私はInterbaseのレコードをListviewで定義した各項目(Item)に表示させています。

例えば以下の通りです。(ポイント部分のみ書いてます)
--------------------------------------------- 
Var
LItem: TListViewItem;

Begin


 LItem := ListView1.Items.Add;

 LItem.Data['Text1']:=FDTable1.Fields[1].AsString;


--------------------------------------------------------------

尚、Listviewの各項目内容を変数に保存するには
  
 Temp :=  LItem.Data['Text1'].AsString;

で可能です。


お試しください。

編集 削除
ガオー  2020-12-02 11:06:33  No: 149433  IP: 192.*.*.*

はくちゃんさんアドバイスありがとうございます。
お陰様でListViewに各項目を表示することができました。

ただ、表示した項目の任意のレコードをタップした時の
Text1、Text2、Text3を取り出すことが出来ずに悩んでいます。
VCLのListViewでは
****************************
  with ListView1 do
  begin
    if Selected <> nil then
    begin
      Edit1.Text  := Selected.Caption;
      Edit2.Text  := Selected.SubItems[0]);
      Edit3.Text  := Selected.SubItems[1]);
    end;
  end;
******************************************
という感じでクリックしたListViewのレコードの情報を取得していました。
何でもお聞きして申し訳ありませんが
ご存知でしたら教えて頂ければ助かります。
よろしくお願いいたします。

編集 削除
はくちゃん  2020-12-03 01:34:11  No: 149437  IP: 192.*.*.*

TlistviewイベントのListView1ItemClickで
取得できます。

Listviewの行をタップすることで動作します。

procedure TForm1.ListView1ItemClick(const Sender: TObject
  const AItem: TListViewItem); 

begin
Edit1.text:= AItem.Data['Text1'].AsString;
Edit2.text:=AItem.Data['Text2'].AsString;
Edit3.text:=AItem.Data['Text3'].AsString;


 End;

お試しください。

編集 削除
はくちゃん  2020-12-04 11:12:14  No: 149453  IP: 192.*.*.*

タップしてデーターの取り出しできましたでしょうか?

編集 削除
ガオー  2020-12-04 13:52:40  No: 149455  IP: 192.*.*.*

はくちゃんさん、ご連絡遅れまして申し訳ありません。
ご指摘通りListViewのデータを取得できました。
本当にありがとうございます。
FMXが理解できなく、色々なところで戸惑い
行き詰り、ご迷惑おかけしてすみません。
今後ともよろしくお願いいたします。

編集 削除