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

解決


ガオー  2020-11-06 13:55:41  No: 149317

いつも大変お世話になっています。
マルチデバイスを開発(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 21:51:46  No: 149319

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


ガオー  2020-11-08 23:53:35  No: 149320

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


igy  2020-11-09 20:08:05  No: 149322

> 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 18:09:22  No: 149350

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


はくちゃん  2020-11-24 19:04:19  No: 149408

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


ガオー  2020-11-25 05:07:24  No: 149410

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


はくちゃん  2020-11-25 10:53:58  No: 149411

以下を先にお試しいただけますか?(こちらは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 19:08:28  No: 149427

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


はくちゃん  2020-12-02 12:48:30  No: 149432

私は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 20:06:33  No: 149433

はくちゃんさんアドバイスありがとうございます。
お陰様で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 10:34:11  No: 149437

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 20:12:14  No: 149453

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


ガオー  2020-12-04 22:52:40  No: 149455

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加