0

У меня есть список, который иногда раздувает XML (элемент TextView) или другой XML (TextView + Image Item). И я следовал этим инструкциям, чтобы получить лучшую производительность.Android - Пользовательская прокрутка прокрутки очень низкая

http://www.google.com/events/io/2010/sessions/world-of-listview-android.html

https://dl.google.com/googleio/2010/android-world-of-listview-android.pdf

http://android.amberfog.com/?p=296

Это теперь лучше, но до сих пор не может получить лучшую производительность и до сих пор прокручивать медленно работает. Вот мой код:

GetView: (// ViewHolder 0 -> Раздел Пункт ViewHolder 1 -> Ввод товара)

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     ViewHolder[] viewHolders=new ViewHolder[2]; 
     final ListItems.Item i = items.get(position); 
     if (i != null) { 
      if(i.isSection()){ 
       TextView sectionView; 
       ListItems.SectionItem si = (ListItems.SectionItem)i; 
       if (v==null || ((ViewHolder[])v.getTag())==null || ((ViewHolder[])v.getTag())[0]==null) 
       { 
        v = vi.inflate(R.layout.order_list_item_section, null); 
        sectionView= (TextView) v.findViewById(R.id.list_item_section_text); 
        viewHolders[0]=new ViewHolder(); 
        viewHolders[0].Title=sectionView; 
        v.setTag(viewHolders); 
       } 
       else 
       { 
        viewHolders[0]=((ViewHolder[]) v.getTag())[0]; 
        sectionView=viewHolders[0].Title; 
       } 
       sectionView.setBackgroundColor(android.graphics.Color.BLACK); 
       sectionView.setText(si.getTitle()); 
      } 
      else if(i.isEntryItem()) 
      {    
       ListItems.EntryItem ei = (ListItems.EntryItem)i; 
       TextView title = null,subtitle = null; 
       ImageView img = null; 
       if (v==null || ((ViewHolder[])v.getTag())==null || ((ViewHolder[])v.getTag())[1]==null) 
       { 
        v = vi.inflate(R.layout.order_list_item_entry, null); 
        title = (TextView)v.findViewById(R.id.list_item_entry_title); 
        img=(ImageView)v.findViewById(R.id.list_item_entry_drawable); 
        subtitle = (TextView)v.findViewById(R.id.list_item_entry_summary); 
        viewHolders[1]=new ViewHolder(); 
        viewHolders[1].Title=title; 
        viewHolders[1].SubTitle=subtitle; 
        viewHolders[1].TableImage=img; 
        v.setTag(viewHolders); 
       } 
       else 
       { 
        viewHolders[1]=((ViewHolder[]) v.getTag())[1]; 
        title=viewHolders[1].Title; 
        subtitle=viewHolders[1].SubTitle; 
        img=viewHolders[1].TableImage; 
       } 
       title.setTextSize(20); 
       title.setTextColor(android.graphics.Color.BLACK); 
       title.setText(Html.fromHtml("<b><i>"+ei.title+"</b></i>")); 
       img.setImageBitmap(ei.tableImage); 
       img.setScaleType(ScaleType.FIT_XY); 
       img.setAdjustViewBounds(true); 
       if(!ei.subtitle.equals("")) 
       { 
        subtitle.setTextSize(15); 
        subtitle.setTextColor(android.graphics.Color.GRAY); 
        subtitle.setText(Html.fromHtml("<i>"+ei.subtitle+"</i>")); 
       } 
      } 

ViewHolder : 

    static class ViewHolder { 
      TextView Title; 
      TextView SubTitle; 
      ImageView TableImage; 
     } 

EDIT:

order_list_item_section.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 

    <include 
     android:id="@+id/list_item_section_text" 
     layout="@android:layout/preference_category" /> 

</LinearLayout> 

order_list_item_entry.xml:

<?xml version="1.0" encoding="utf-8"?> 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="?android:attr/listPreferredItemHeight" 
    android:gravity="center_vertical" 
    android:paddingRight="?android:attr/scrollbarSize" 
    android:background="#ffffff"> 

    <ImageView 
     android:id="@+id/list_item_entry_drawable" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:paddingLeft="6dp"/> 

    <RelativeLayout 
     android:layout_width="0dip" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="0dip" 
     android:layout_marginRight="6dip" 
     android:layout_marginTop="6dip" 
     android:layout_marginBottom="6dip" 
     android:layout_weight="1"> 

     <TextView android:id="@+id/list_item_entry_title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:singleLine="true" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:ellipsize="marquee" 
      android:fadingEdge="horizontal" /> 

     <TextView android:id="@+id/list_item_entry_summary" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/list_item_entry_title" 
      android:layout_alignLeft="@id/list_item_entry_title" 
      android:textAppearance="?android:attr/textAppearanceSmall" 
      android:singleLine="true" 
      android:textColor="?android:attr/textColorSecondary" /> 

    </RelativeLayout> 

</LinearLayout> 

Мне нужны какие-либо предложения. Благодарю.

+0

Это когда-то будет вызвана, как определить ваш макет XML, мой размещать также те XMLs вы надувать? И расширяете ли вы ArrayAdapter? когда у вас есть такой список, в котором вы будете раздувать разные макеты, подумайте над расширением BaseAdapter. Который тогда вы всегда можете повторно использовать ваш convertView вместо того, чтобы раздуваться каждый раз, когда getView называется –

+0

Проводка сейчас .... Я разместил файлы XML. Да, я использую ArrayAdapter, вы можете показать мне акселемент о BaseAdapter –

+0

Я попытался изменить его BaseAdapter, но результат все тот же. Может быть, немного лучше. –

ответ

2

Если это будет принято, я думаю, что нужно включить отладку здесь:

  1. Снимите ellipsize и fadingedge, и для обоих TextView установить ширину match_parent, если прокрутка по-прежнему медленно, попробуйте следующий.

  2. scaleType="fitXY" вместе с wrap_content на ImageView на самом деле звучит совсем, конфликтует, если вы спросите меня, попробуйте специально настройки ширины и высоты, может быть, 48dp или 55dp, то fitXY имеет смысл.

Вот пример функции для правильного класса BaseAdapter:

public static final int SECTION = 2; 
public static final int ENTRY_ITEM = 1; 
private List<ListItems.Item> items; // I believe you have this List declared? 

public YourClassConstructor(){ 
    //Whatever you need to accept and assign, probably the list itself. 
} 

public int getCount() { 
    return items.size(); 
} 

public Object getItem(int position) { 
    return items.get(position); 
} 

public long getItemId(int position) { 
    return (long) position; // Or anything that can define your item 
} 

@Override 
public int getViewTypeCount() { 
    return 2; // 2 because you have Section and EntryItem 
} 

@Override 
public int getItemViewType(int position) { 
    int itemViewType; 
    ListItems.Item i = items.get(position); 

    if(i.isSection()){ 
     itemViewType = SECTION; 
    }else{ 
     itemViewType = ENTRY_ITEM; 
    } 

    return itemViewType; 
} 

@Override 
public View getView(final int position, final View convertView, final ViewGroup parent { 
    //Here your convertView will always be the one you need, either as a section or entry_item 
    //Unless there is no convertView available yet. 
    //So your (ViewHolder[])v.getTag())[0/1] will less likely be null. 
} 
+0

Спасибо за экономию жизни. –

0

Do v = vi.inflate(R.layout.order_list_item_section, null);только если v - null. Это очень поможет.

+0

Вы даже не читали код !!!! –

+0

Вы правы, извините, не оправдание, но именно поэтому Google предлагает избегать длинных строк кода, подобных этому: if (v == null || ((ViewHolder []) v.getTag()) == null || ((ViewHolder []) v.getTag()) [0] == null) ':-) – herveRilos

+0

Но поскольку вы можете читать из кода, мне нужно их проверить:/ –

Смежные вопросы