获取视图被夸大的资源ID

Rob*_*uba 5 android listview android-layout 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;
}
Run Code Online (Sandbox Code Playgroud)

在最坏的情况下,我根本不能重复使用视图,只是每次都需要扩展我需要的布局,但这看起来非常浪费.

Sam*_*Sam 5

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

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