2017-12-05 5 views
0

Ich habe zwei Samsung Tabletten (Samsung SM-T580 Android 7.0 und SM-T280 Android 5.1). Ich habe eine Listenansicht mit einem benutzerdefinierten Adapter. Es funktioniert gut auf dem SM-T580, aber es stürzt auf der ersten Iteration des Verfahrens:Android ListView mit benutzerdefinierten Adapter Absturz auf SM-T280 Tablette

public override View GetView(int position, View convertView, ViewGroup parent) 

auf der SM-T280 Tablette. Ich verstehe nicht, wie es beim SM-T580 perfekt funktioniert und beim SM-T280 abstürzt. Die Fehlermeldung beim Absturz lautet:

Die Anwendung befindet sich im Unterbrechungsmodus. (. Typischerweise System oder Rahmencode)

Ihre App eine Pause Zustand eingetreten sind, aber es gibt keinen Code zu erhalten, da alle Threads externe Codes ausgeführt wurden

Ich habe den Compiler auf:

Compile using Android version: (Target Framework) 
Android 5.1 (Lollipop) 

Ich verwende Visual Studio 2017 mit Xamarin.

Folgendes ist mein Code.

Der Layout-Code:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <TableLayout 
     android:minWidth="25px" 
     android:minHeight="25px" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:stretchColumns="2" 
     android:id="@+id/tableLayout1"> 
     <TableRow 
      android:id="@+id/tableRow1" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" 
      android:layout_weight="1"> 
      <TextView 
       android:id="@+id/CompanyNameLabel" 
       android:text="" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_weight="1" 
       android:layout_column="1" 
       android:layout_gravity="left" 
       android:textStyle="bold" 
       android:textSize="16sp" 
       android:padding="8dip" /> 
      <TextView 
       android:id="@+id/CompanySalesLabel" 
       android:text="" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_weight="1" 
       android:layout_column="2" 
       android:layout_gravity="right" 
       android:padding="8dip" /> 
     </TableRow> 
    </TableLayout> 
    <TextView 
     android:id="@+id/CompanyAddressLabel" 
     android:text="" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:paddingLeft="20dip" /> 
    <TextView 
     android:id="@+id/CompanyCityStateZipLabel" 
     android:text="" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:paddingLeft="20dip" /> 
</LinearLayout> 

Der Blick Halter Code:

public class MyMainCompanyRowHolder : Java.Lang.Object 
{ 
    public TextView CompanyName { get; set; } 
    public TextView CompanyAddress { get; set; } 
    public TextView CompanySales { get; set; } 
    public TextView CompanyCityStateZipLabel { get; set; } 
    public static T Cast<T>(Java.Lang.Object obj) where T : MyMainCompanyRowHolder 
    { 
     var propInfo = obj.GetType().GetProperty("Instance"); 
     return propInfo == null ? null : propInfo.GetValue(obj, null) as T; 
    } 
} 

Der Brauch Adapter:

public class ListAdapter : BaseAdapter<Company> 
{ 
    List<Company> company; 
    Activity context; 

    public ListAdapter(Activity currentContext, List<Company> companyList) : base() 
    { 
     this.company = companyList; 
     this.context = currentContext; 

    } 

    public override Company this[int position] 
    { 
     get { return company.ToArray()[position]; } 
    } 

    public override int Count 
    { 
     get { return company.Count; } 
    } 

    public override long GetItemId(int position) 
    { 
     return position; 
    } 

    public override View GetView(int position, View convertView, ViewGroup parent) 
    { 
     Models.ViewHolder.MyMainCompanyRowHolder myViewHolder = null; 

     View view = convertView; 

     if (view != null) 
      myViewHolder = Models.ViewHolder.MyMainCompanyRowHolder.Cast<Models.ViewHolder.MyMainCompanyRowHolder>(view.Tag); 

     if (myViewHolder == null) 
     { 
      myViewHolder = new Models.ViewHolder.MyMainCompanyRowHolder(); 
      //view = context.LayoutInflater.Inflate(Android.Resource.Layout.SimpleListItem1, null); 
      view = context.LayoutInflater.Inflate(Resource.Layout.MainCompanyListRow, null); 

      myViewHolder.CompanyName = view.FindViewById<TextView>(Resource.Id.CompanyNameLabel); 
      myViewHolder.CompanyAddress = view.FindViewById<TextView>(Resource.Id.CompanyAddressLabel); 
      myViewHolder.CompanySales = view.FindViewById<TextView>(Resource.Id.CompanySalesLabel); 
      myViewHolder.CompanyCityStateZipLabel = view.FindViewById<TextView>(Resource.Id.CompanyCityStateZipLabel); 

      view.Tag = myViewHolder; 

     } 
     myViewHolder.CompanyName.Text = company.ToArray()[position].CompanyName; 
     myViewHolder.CompanyAddress.Text = company.ToArray()[position].Address; 
     myViewHolder.CompanySales.Text = company.ToArray()[position].ActualSales.ToString("C0"); 
     myViewHolder.CompanyCityStateZipLabel.Text = company.ToArray()[position].City + ", " + company.ToArray()[position].State + " " + company.ToArray()[position].Zip; 
     return view; 
    } 
} 

Der Aufruf im Aktivitätsmodul:

myCompany = myDBF.getCompany(""); 
var listView = FindViewById<ListView>(Resource.Id.OrderMethodListView); 
listView.Adapter = new Models.Adapters.ListAdapter(this, myCompany); 
+0

Welche Zeile in Ihrem Code schlägt fehl? Und was wird in 'logcat' gemeldet? – SushiHangover

+0

Es stürzt direkt nach der "Rückkehr Ansicht;" in der GetView-Methode in ListAdapter. Es stürzt nach der ersten Iteration ab. Ich habe 25 Firmen in der Reihe. Die GetView-Methode sollte 25 mal ausgeführt werden, wenn der Adapter festgelegt ist. Ich habe die Log-Katze noch nicht überprüft. Der Code funktioniert auf dem SM-T580 einwandfrei. – MCM

+0

Lassen Sie die Ausnahme auftreten, setzen Sie die App fort (brechen Sie sie nicht ab), und rufen Sie die Absturzdetails ab. – SushiHangover

Antwort

0

Danke! Ich habe es herausgefunden. Android 5.1 mag nicht:

android:layout_weight="1" 
android:layout_column="1" 
android:layout_gravity="left" 

Sobald ich diese Zeilen aus meinem Layout Code entfernt, funktioniert die App korrekt.

Verwandte Themen