Android新手,请帮我理解这段代码

时间:2011-07-22 12:19:30

标签: java 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

4 个答案:

答案 0 :(得分:3)

所有这一切都在调用超类构造函数(即ArrayAdapter)。这必须是子类构造函数中的第一行。


我建议您阅读Using the Keyword super教程。

答案 1 :(得分: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。

最后一个参数是填充适配器所需的数组。

答案 2 :(得分:0)

您正在将自定义布局传递给ArrayAdapter R.layout.row,它具有图像字段。

在渲染时,您再次询问超级视图(自定义视图)并根据您的要求修改图像。

我相信,您可以直接在GetView中创建视图,而无需使用基础构造函数

如果将IconicAdapter分隔在单独的类中,则必须在实例化类时传递项目列表

答案 3 :(得分: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