Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 获取从中膨胀视图的资源id_Android_Android Layout_Listview_Android Resources - Fatal编程技术网

Android 获取从中膨胀视图的资源id

Android 获取从中膨胀视图的资源id,android,android-layout,listview,android-resources,Android,Android Layout,Listview,Android Resources,是否有一种方法可以获取视图从中膨胀的布局的资源id(如R.layout.viewtoInflate) 我正在尝试实现一个列表视图,它为列表项使用2个自定义布局。使用的项目布局基于用于填充列表视图的对象中的字段 我在自定义适配器中缺少的是一种方法,可以知道我在getView()中获得的“convertView”是从哪个资源中膨胀的。如果我可以获得这些信息,我可以比较并确定是否可以重新使用convert视图,或者是否必须将其替换为当前项的适当布局 所以理想情况下是这样的: @Override pub

是否有一种方法可以获取视图从中膨胀的布局的资源id(如R.layout.viewtoInflate)

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

我在自定义适配器中缺少的是一种方法,可以知道我在getView()中获得的“convertView”是从哪个资源中膨胀的。如果我可以获得这些信息,我可以比较并确定是否可以重新使用convert视图,或者是否必须将其替换为当前项的适当布局

所以理想情况下是这样的:

@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;
}
@覆盖
公共视图getView(int位置、视图转换视图、视图组父视图){
视窗座;
JSONObject currItem=mItems.getJSONObject(位置);
内部布局类型;
if(curroItem.getBoolean(“替代”))
layoutType=R.layout.list_项_b;
其他的
layoutType=R.layout.list_项_a;
if(convertView==null | |!=layoutType){
convertView=充气机。充气(layoutType,null);
//完成新视图及其保持架的设置
}
否则{
//获取视图持有者以进行视图重用
}
//用所需的内容填充视图
返回视图;
}

在最坏的情况下,我根本就不能重用视图,每次都只是膨胀我需要的布局,但这似乎非常浪费

有一种使用多个布局的官方方法,只需覆盖
getViewTypeCount()
getItemViewType()
。这些方法通知适配器需要多个布局,
convertView
始终是合适的布局(因此不需要检查资源id)。请参阅一些示例代码


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

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


如果您仍然想知道它是从什么布局充气的,那么您可以使用
setTag()
将任何信息附加到视图,然后使用
getTag()
检索它-它可以是您的布局id或任何其他内容。

如果您要求从充气的布局中获取项目的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);

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


希望这能有所帮助。

我不明白我怎么会错过这个多版面功能,但谢谢你。还感谢您提出的查找布局类型的建议,现在不再需要了,不过很高兴知道。不过,我觉得奇怪的是,没有官方的方法来获取膨胀视图的布局。上面的代码是如何返回膨胀项的id的。findviewbyid只返回视图,不返回id