2015-08-17 40 views
0

我知道有几种方法可以用标题和图标填充Android ListView对象,但在尝试简化和改进我的代码时,我感觉卡住了。如何改善填充我的ListView?

这是情形:

1 - 创建两个阵列

enter image description here

2 - 创建RowItem类

public class IconRow { 

    private String title; 
    private int icon; 

    public IconRow(String title, int icon) { 
     this.title = title; 
     this.icon = icon; 

    } 
     public String getTitle() { 
     return title; 
    } 

    public int getIcon() { 
     return icon; 
    } 

} 

3 - 创建ListAdapter

public class ListAdapter extends BaseAdapter { 

    Context context; 
    List<IconRow> rowItem; 
    String description; 
    long option; 

public ListAdapter(Context context, List<IconRow> rowItem, String description, long option) 
{ 
    this.context = context; 
    this.rowItem = rowItem; 
    this.description = description; 
    this.option = option; 

} 

@Override 
public int getCount() { 

    return rowItem.size(); 
} 

@Override 
public Object getItem(int position) { 

    return rowItem.get(position); 
} 

@Override 
public long getItemId(int position) { 

    return rowItem.indexOf(getItem(position)); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    if (convertView == null) { 
     LayoutInflater mInflater = (LayoutInflater) context 
       .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 

      convertView = mInflater.inflate(R.layout.lv_arrow, null); 


     ImageView imgIcon = (ImageView) convertView.findViewById(R.id.imageView1); 
     TextView txtTitle = (TextView) convertView.findViewById(R.id.textView1); 

     IconRow row_pos = rowItem.get(position); 
     // setting the image resource and title 
     imgIcon.setImageResource(row_pos.getIcon()); 
     txtTitle.setText(row_pos.getTitle()); 
    } 

    return convertView; 
} 

4 - 创建行布局

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" 
    android:background="@android:color/white" > 
    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_marginLeft="20dp" 
     android:layout_marginRight="10dp" 
     android:fontFamily="sans-serif-light" 
     android:text="TextView" 
     android:textColor="@android:color/black" 
     android:textSize="24dp" /> 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="match_parent" 
     android:layout_height="48dp" 
     android:layout_gravity="right|center" 
     android:layout_marginLeft="20dp" 
     android:scaleType="fitEnd" 
     android:src="@drawable/ic_go" 
     android:layout_marginRight="0dp" /> 

</LinearLayout> 

5 - 创建内部片段

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_parameters_settings, container, false); 

     lv_settings_1 = (ListView) rootView.findViewById(R.id.lv_settings_1); 

     menutitles = getResources().getStringArray(R.array.array_lv_settings_1); 
     menuIcons = getResources().obtainTypedArray(R.array.arrow_icons); 

     menu_iconRow = new ArrayList<>(); 
     for (int i = 0; i < menutitles.length; i++) { 
      IconRow items = new IconRow(menutitles[i], menuIcons.getResourceId(
        i, -1)); 
      menu_iconRow.add(items); 
     } 

     adapter_settings_1 = new ListAdapter(getActivity(), menu_iconRow, "No Description", 0); 

     lv_settings_1.setAdapter(adapter_settings_1); 

     return rootView; 
    } 

名单我做了错误的方式?无论如何,我可以简化此代码?

回答

3

我通常用你的方式来管理ListView。也许你知道这一点,但在本页面给看看http://developer.android.com/training/improving-layouts/smooth-scrolling.html

你的代码的ListView的滚动,这会降低性能期间可能调用findViewById()频繁。即使适配器返回回收的充气视图,您仍然需要查找元素并进行更新。围绕重复使用findViewById()的方法是使用“视图持有者”设计模式。

static class ViewHolder { 
    TextView text; 
    TextView timestamp; 
    ImageView icon; 
    ProgressBar progress; 
    int position; 
} 
+0

是的,使用ViewHolder是个好主意。这里有一个帮助我的教程:http://www.javacodegeeks.com/2013/09/android-viewholder-pattern-example.html –