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