0

我已经从教程中编写了这段代码。

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
    // TODO Auto-generated method stub
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View row = inflater.inflate(R.layout.single_row, viewGroup,false);

    TextView title = (TextView) row.findViewById(R.id.txtTitle);
    TextView description = (TextView) row.findViewById(R.id.txtDescription);
    ImageView image = (ImageView) row.findViewById(R.id.imgPic);

    SingleRow temp = list.get(i);

    title.setText(temp.title);
    description.setText(temp.description);
    image.setImageResource(temp.image);


    return row;
}

在这行代码中:

TextView title = (TextView) row.findViewById(R.id.txtTitle);

我认为 TextView 被复制到同类变量中。然后在这行代码中:

title.setText(temp.title);

我们用一些东西填充那个变量。然后返回与“标题”变量无关的视图行变量。
这个怎么运作?我认为这些变量在这里无关。

4

3 回答 3

0

此代码膨胀一个新视图,设置它的内容。这意味着您正在以编程方式创建新视图。它经常被使用,即当填充一个列表时,你将有许多行,每行在结构上相同,但具有不同的值。

下面是它的工作原理:

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
    // Get the inflater service
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    // Inflate view with ID = R.layout.single_row into the row variable
    View row = inflater.inflate(R.layout.single_row, viewGroup,false);

    // Get child views of row: title, description and image.
    TextView title = (TextView) row.findViewById(R.id.txtTitle);
    TextView description = (TextView) row.findViewById(R.id.txtDescription);
    ImageView image = (ImageView) row.findViewById(R.id.imgPic);

    // This get's some template view which will provide data: title, description and image
    SingleRow temp = list.get(i);

    // Here you're setting title, description and image by using values from `temp`.
    title.setText(temp.title);
    description.setText(temp.description);
    image.setImageResource(temp.image);

    // Return the view with all values set. This view will be later probably added somewhere as a child (maybe into a list?)
    return row;
}
于 2013-10-13T09:02:16.703 回答
0

这是用于返回列表视图中一行的视图的方法。row变量实际上与 相关title,如您在此处所见。-

TextView title = (TextView) row.findViewById(R.id.txtTitle);

换句话说,title是一个TextView内部row对象,并且该代码检索它以设置其文本。总而言之,整个getView方法是对 a 进行膨胀single_row View,并为 的所有相关子级设置属性row

于 2013-10-13T09:00:03.227 回答
0
View row = inflater.inflate(R.layout.single_row, viewGroup,false);

您正在膨胀布局single_row

TextView title = (TextView) row.findViewById(R.id.txtTitle);

初始化文本视图singlerow.xml

title.setText(temp.title);

将标题设置为文本视图。

您正在为列表视图中的每一行添加一个布局。

此外,最好使用 viewHolder 模式。

http://developer.android.com/training/improving-layouts/smooth-scrolling.html

您也可以将以下内容移至适配器类的构造函数并声明inflater为类成员

 inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

您可能对以下链接感兴趣

ListView 的回收机制是如何工作的

于 2013-10-13T09:00:25.087 回答