0

Android で TableLayout を動的に作成して設定する方法を知りたいです。事前に (XML を介して) 静的にテーブルを作成できますが、アプリケーションのロード時にサーバーから取得したデータセットをテーブルに入力できる必要があります。列の数は常に同じですが、取得したデータセットによって行の数が変わります。

テーブルにデータを入力するための最良の方法は何ですか?

4

1 に答える 1

1

これは、最終的に Xamarin.Android のファイル マネージャー アクティビティになる可能性のある XML とコードです。ListView は、FileAdapter によって設定されます。FileAdapter は FileSystemInfo オブジェクトのリストを保持します。これは、DirectoryInfo クラスと FileInfo クラスの両方がこのタイプであるため、便利です。この例で ListView がどのように機能するかの要点を理解できるはずです。この例は、Xamarin サイトに表示されるスターター リスト ビューよりも少し複雑です。これは、リスト ビューがディスプレイ内の唯一のビューではないためです。ビューの上部に沿って水平にいくつかのボタンがあります。ユーザーが追加のコマンドを実行できるように.. アイコンを含めることができなくて申し訳ありません。それらは私の所有物ではありません。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:minWidth="25px"
android:background="@drawable/splash_image"
android:minHeight="25px">
<LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:minWidth="25px"
    android:minHeight="25px">
    <ImageButton
        android:src="@drawable/undo"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:id="@+id/imageButton1" />
    <ImageButton
        android:src="@drawable/addfolder"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:id="@+id/imageButton3" />
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:minWidth="25px"
        android:minHeight="25px">
        <TextView
            android:id="@+id/folder"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:paddingTop="10dip"
            android:textColor="@android:color/white"
            android:textSize="20dip" />
    </LinearLayout>
</LinearLayout>
<ListView
    android:minWidth="25px"
    android:minHeight="25px"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@android:id/list" />

[Activity (Label = "Documents")]            
public class DocumentsActivity : ListActivity
{
    string path;
    ListView ourlist;
    TextView folder;
    ImageButton back;
    ImageButton home;
    protected override void OnCreate (Bundle bundle)
    {
        base.OnCreate (bundle);
        SetContentView (Resource.Layout.DocumentsActivity);

        back = FindViewById<ImageButton> (Resource.Id.imageButton1);


        back.Click += delegate {
            this.BackClick();
        };
        back.LongClick += delegate {
            UserHelper.BackButton(this);
        };

        ourlist = FindViewById<ListView> (Android.Resource.Id.List);
        folder = FindViewById<TextView> (Resource.Id.folder);

        path = Android.OS.Environment.ExternalStorageDirectory.ToString();
        folder.Text = "Folder: "+new DirectoryInfo (path).Name;
        ourlist.Adapter = new FileAdapter (path, this);
    }
    private void CreateFolder(string path)
    {
        if (!Directory.Exists (path))
            Directory.CreateDirectory (path);
    }
    private void BackClick()
    {
        DirectoryInfo dir = new DirectoryInfo(path);
        ourlist.Adapter = new FileAdapter (dir.Parent.FullName, this);
        folder.Text = "Folder: "+dir.Parent.Name;

    } 
    protected override void OnListItemClick(ListView l, View v, int position, long id)
    {
        FileAdapter files = (FileAdapter)l.Adapter; 
        var t = files.Items[position];

        if (t is DirectoryInfo) {
        //Folder Behavior : 
            path = t.FullName;
            folder.Text = "Folder: "+t.Name;
            ourlist.Adapter = new FileAdapter (t.FullName,this);

        } else 
        {
        // File Behavior: (This is where will work will come in!)
            Android.Widget.Toast.MakeText (this, t.Name, Android.Widget.ToastLength.Short).Show ();
        }
    }
}



public class FileAdapter : BaseAdapter <FileSystemInfo>
{
    Activity _activity;
    string path;
    DirectoryInfo dir;

    public FileAdapter (string path,Activity act)
    {
        Items = new List<FileSystemInfo> ();
        dir = new DirectoryInfo (path);
        Items.AddRange (dir.GetDirectories().Where(z => !z.Name.StartsWith(".")).Cast<FileSystemInfo>().ToList());
        Items.AddRange (dir.GetFiles ());
        _activity = act;
    }

    public override FileSystemInfo this [int position] { 

        get { return Items[position]; }
    }
    public override int Count {
        get { return Items.Count() ; }
    }
    public override long GetItemId (int position)
    {
        return Items[position].GetHashCode();
    }

    public List<FileSystemInfo> Items {
        get;
        set;
    }

    public override View GetView (int position, View convertView, ViewGroup parent)
    {           
        View view = convertView; 

        if (view == null)
            view = _activity.LayoutInflater.Inflate (Resource.Layout.CustomView, null);

        if (Items [position] is DirectoryInfo) {
            ImageView imageview = view.FindViewById<ImageView> (Resource.Id.Image);
            imageview.SetImageResource (Resource.Drawable.Folder);
        } else {
            ImageView imageview = view.FindViewById<ImageView> (Resource.Id.Image);
            imageview.SetImageResource (Resource.Drawable.Files);
        }
        TextView text = view.FindViewById<TextView> (Resource.Id.Text1);
        text.Text = Items[position].Name;
        text.SetMinimumHeight (50);
        text.SetTextSize (Android.Util.ComplexUnitType.Pt, 10);

        return view;
    }
}
于 2013-08-10T15:26:43.603 に答える