获取视图被夸大的资源ID

时间:2013-04-08 20:32:50

标签: android android-layout listview android-resources

有没有办法获取视图膨胀的布局的资源ID(如R.layout.viewtoInflate)?

我正在尝试实现一个列表视图,该列表视图对列表项使用2个自定义布局。使用的项目布局基于用于填充列表视图的对象中的字段。

我在自定义适配器中缺少的是一种了解我在getView()中获得的'convertView'被夸大的资源的方法。如果我能得到这些信息,我可以比较并确定我是否可以重新使用转换视图,或者我是否必须用当前项目的相应布局替换它。

理想情况下,它会是这样的:

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

    JSONObject currItem = mItems.getJSONObject(position);

    int layoutType;

    if (currItem.getBoolean("alternate"))
        layoutType = R.layout.list_item_b;
    else
        layoutType = R.layout.list_item_a;

    if (convertView == null || <convertView.resourceID> != layoutType ) {
        convertView = inflater.inflate(layoutType, null);

        //Finish setting up new View and its holder
    }
    else {
        //Get view holder for view reuse
    }

    //populate view with the required content

    return convertView;
}

最糟糕的是,我根本不能重复使用视图,只是每次都需要扩展我需要的布局,但这看起来非常浪费。

4 个答案:

答案 0 :(得分:5)

有一种使用多种布局的官方方法,只需覆盖getViewTypeCount()getItemViewType()即可。这些方法通知适配器期望多个布局,convertView将始终是适当的布局(因此不需要检查资源ID。)请参阅this example以获取一些示例代码。

但是如果你想找出哪个布局,只需检查一个独特的特征。例如,您可以在仅存在于一个布局中的视图上使用findViewById(),然后检查它是否返回null

答案 1 :(得分:3)

列表视图支持多种布局 - 您需要返回getViewTypeCount()中使用的布局数量,并更正getItemViewType()中行的布局类型。

如果你还想知道它是什么布局,那么你可以使用setTag()将任何信息附加到视图中,然后使用getTag()检索它 - 它可以是你的layoutId或任何东西其他

答案 2 :(得分:1)

我所做的是在创建视图时在视图持有者中保存膨胀视图的资源ID。这允许我在填充视图时获取布局资源ID。

希望这有帮助。

答案 3 :(得分:-1)

如果您要求从已夸大的布局中获取项目的ID。它是这样的: -

//Suppose you have an TextView in the inflated layout of id textView1. Here you go

convertView = inflater.inflate(layoutType, null);
TextView tv = (TextView)convertview.findViewById(R.id.textView1);