J'ai une table avec environ 20 colonnes et le nombre d'enregistrements qui varie de 5-20 +. Je veux afficher toutes ces données sur l'écran en utilisant des barres de défilement horizontales et verticales. Je suis déchiré sur quelle méthode serait le mieux pour le faire. J'ai commencé à utiliser une solution de listview, mais je me suis bloqué. Ce qui suit est le XML pour ma mise en page (ive condensé les lignes de la table, mais vous voyez l'idée) ..MonoDroid Affichage des champs de base de données avec la barre de défilement horizontale
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/btnHome"
style="@style/homeButton"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:gravity="center"
android:text="@string/btnHomeText"
android:textColor="@color/white"
android:textStyle="bold" />
<RelativeLayout
android:id="@+id/InnerRelativeLayout2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/btnHome">
<LinearLayout
style="@style/stdWindow"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:baselineAligned="false"
android:orientation="vertical">
<TextView
android:id="@+id/tvDriverReport"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:background="@color/VeryDarkGray"
android:text="@string/futureFeatureText"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/OMSGold" />
<TableLayout
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/tableLayout1">
<TableRow
android:id="@+id/tableRow1">
<TextView
android:text="@string/summaryTicketNumber"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_column="0"
android:id="@+id/textView10" />
<TextView
android:text="@string/summaryDate"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_column="1"
android:id="@+id/textView11" />
<TextView
android:text="@string/summaryTruckNumber"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_column="2"
android:id="@+id/textView12" />
<TextView
android:text="@string/summaryBeginOdometer"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_column="3"
android:id="@+id/textView21" />
<TextView
android:text="@string/summaryEndOdometer"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_column="4"
android:id="@+id/textView22" />
</TableRow>
<TableRow
android:id="@+id/tableRow2">
<TextView
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_column="0"
android:id="@+id/tvTicketNumber" />
<TextView
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_column="1"
android:id="@+id/tvSummaryDate" />
<TextView
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_column="2"
android:id="@+id/tvTruckNumber" />
<TextView
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_column="3"
android:id="@+id/tvBeginOdometer" />
<TextView
android:layout_column="4"
android:textAppearance="?android:attr/textAppearanceMedium"
android:id="@+id/tvEndOdometer" />
</TableRow>
</TableLayout>
</LinearLayout>
</RelativeLayout>
</LinearLayout>
Donc, fondamentalement, la ligne du tableau 1 est des données de cap statiques, mais chaque ligne après seront renseignés de manière dynamique à partir de la base de données , donc le nombre de lignes sera variable.
J'ai commencé à utiliser la solution de l'adaptateur de liste personnalisée, mais je n'arrive pas à la faire fonctionner. Voici mon customlistadapter
public class CustomListAdapter : BaseAdapter
{
Activity context;
public List<TicketSummaryMapper> items;
public CustomListAdapter (Activity context)
: base()
{
this.context = context;
var db = new SQLiteConnection (db);
items = db.Query<TicketSummaryMapper> ("select * from mydatabase");
}
public override int Count
{
get { return items.Count; }
}
public override Java.Lang.Object GetItem(int position)
{
return position;
}
public override long GetItemId(int position)
{
return position;
}
public override View GetView (int position, View convertView, ViewGroup parent)
{
var item = items [position];
var view = (convertView ??
context.LayoutInflater.Inflate (
Resource.Layout.ticket_summary,
parent,
false)) as LinearLayout;
//Find references to each subview in the list item's view
var textTicketNo = view.FindViewById (Resource.Id.tvTicketNumber) as TextView;
var textSummaryDate = view.FindViewById (Resource.Id.tvSummaryDate) as TextView;
var textTruckNumber = view.FindViewById (Resource.Id.tvTruckNumber) as TextView;
var textBeginOdometer = view.FindViewById (Resource.Id.tvBeginOdometer) as TextView;
//Assign this item's values to the various subviews
textTicketNo.SetText (item.TicketNumber, TextView.BufferType.Normal);
textSummaryDate.SetText (item.TransDate, TextView.BufferType.Normal);
textTruckNumber.SetText (item.EquipmentNo, TextView.BufferType.Normal);
textBeginOdometer.SetText (item.BeginOdometer, TextView.BufferType.Normal);
//Finally return the view
return view;
}
public TicketSummaryMapper GetItemAtPosition(int position)
{
return items[position];
}
}
puis enfin mon activité ...
[Activity (Label = "AdminActivity")]
public class AdminActivity : Activity
{
CustomListAdapter listAdapter;
public AdminActivity() { }
public AdminActivity(IntPtr handle, JniHandleOwnership transfer) : base(handle, transfer) { }
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
//Set the Activity's view to our list layout
SetContentView (Resource.Layout.customlist);
//Create our adapter
listAdapter = new CustomListAdapter (this);
//Find the listview reference
var listView = FindViewById<ListView> (Resource.Id.listView);
//Hook up our adapter to our ListView
listView.Adapter = listAdapter;
}
}
la mise en page de CustomList a fondamentalement juste un LinearLayout suivi d'un listview et thats it. Merci de prendre le temps de regarder ce ...
Bon le code ci-dessus fonctionne correctement, sauf sa recréer fondamentalement l'ensemble xml fichier que j'ai posté sur le dessus (répétant pour chaque ligne) plutôt que juste les lignes de données de la base de données. – k1komans