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