2011-07-22 84 views
-1

我下面一本書的例子來學習Android和來到翻過此代碼:Android的新手,幫助我理解的代碼塊,請

public class DynamicDemo extends ListActivity { 
    TextView selection; 
    private static final String[] items={"lorem", "ipsum", "dolor", 
      "sit", "amet"} 
    @Override 
    public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.main); 
    setListAdapter(new IconicAdapter()); 
    selection=(TextView)findViewById(R.id.selection); 
    } 

    public void onListItemClick(ListView parent, View v, 
          int position, long id) { 
    selection.setText(items[position]); 
    } 

    class IconicAdapter extends ArrayAdapter<String> { 
    IconicAdapter() { 
     super(DynamicDemo.this, R.layout.row, R.id.label, items); 
    } 

    public View getView(int position, View convertView, 
         ViewGroup parent) { 
     View row=super.getView(position, convertView, parent); 
     ImageView icon=(ImageView)row.findViewById(R.id.icon); 

     if (items[position].length()>4) { 
     icon.setImageResource(R.drawable.delete); 
     } 
     else { 
     icon.setImageResource(R.drawable.ok); 
     } 

     return(row); 
    } 
    } 
} 

我真正瞭解的代碼,除了在爲什麼我們說的構造:

super(DynamicDemo.this, R.layout.row, R.id.label, items); 

這是唯一使我困惑的部分。
謝謝!
R

回答

1

那裏有很多事情要做。

首先,這是一個super調用,因此它調用ArrayAdapter的構造函數。它調用這個構造函數:http://developer.android.com/reference/android/widget/ArrayAdapter.html#ArrayAdapter(android.content.Context, int, int, T[])

第一個參數是使用this實際獲取DynamicDemo類的當前實例。這是因爲DynamicDemo擴展了ListActivitty,它擴展了Activity,最終擴展了Context,這是您需要的對象的類型。

接下來的兩個參數是它要求的資源ID。

最後一個參數是一個數組,它需要填充適配器。

+0

幫助,謝謝! – Ryan

0

您將自定義佈局傳遞給ArrayAdapter R.layout.row,它具有圖像字段。

在渲染時,您再次詢問超級視圖(自定義視圖)並根據您的要求修改圖像。

我相信,你可以直接在GetView創建視圖,而無需如果分開在不同的類中的IconicAdapter使用基本構造

,你將不得不通過的項目清單,同時實例化類

0
super(DynamicDemo.this, R.layout.row, R.id.label, items); 



@Param DynamicDemo.this : context 
@param R.layout.row : list item layout reference 
@param R.id.label : id of textView for which you want to setText string at position i from String-Array (items) 
@param items : arrays list containing strings you want to show in list