- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个自定义的适配器,它有一个标题和自定义的行。有时我的 v.getTag() 在我存储 ViewHolder 的位置返回 null。它不会一直发生,我无法弄清楚它何时以及为什么会发生。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
//Header
if(items.hasDescription() && 0 == position) {
LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.app_list_header, null);
((TextView) v.findViewById(R.id.app_list_header_description_text)).setText(items.getDescription());
return v;
}
ViewHolder holder;
// Inflate app view.
if (v == null || v.getTag() == null) {
LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(textViewResourceId, null); //TODO: parent instead of null?
holder = new ViewHolder();
holder.title = (TextView) v.findViewById(R.id.title);
holder.company = (TextView) v.findViewById(R.id.company);
holder.priceOrStatus = (TextView) v.findViewById(R.id.price);
holder.rating = (RatingBar) v.findViewById(R.id.rating);
holder.icon = (ImageView) v.findViewById(R.id.icon);
v.setTag(holder);
} else {
holder = (ViewHolder) v.getTag();
}
}
App app;
if(items.hasDescription()) {
app = items.get(position-1);
} else {
app = items.get(position);
}
// TODO: Do we need this?
if (null == app || null == holder) {
Log.d(TAG, "app: " +app +" holder: " +holder);
return v;
}
//TODO: FIX THE XML BEFORE SO WE DO NOT NEED TO TRIM IT.
// And get rid of all these ifs!!
if(holder.title != null) {
holder.title.setText(app.getTitle().trim());
}
谁能帮帮我?
最佳答案
您在此处使用自定义 ListAdapter
的标准模式。并非所有 View 都会被回收,例如首次创建它们以填充 ListView
。
您可能还想在创建适配器时引用 LayoutInflater
以稍微提高效率,请参见下面的代码段
private class AlertListAdapter extends ArrayAdapter< Alert >
{
private ViewHolder holder;
private LayoutInflater mInflater;
public AlertListAdapter( Context context, List< Alert > items )
{
super( context, R.layout.dashboard_layout, items );
mInflater = LayoutInflater.from( context );
}
public View getView( int position, View recycledView, ViewGroup parent )
{
if ( recycledView == null || recycledView.getTag() == null )
{
recycledView = mInflater.inflate( R.layout.list_item, null );
holder = new ViewHolder();
holder.header = ( LinearLayout ) recycledView.findViewById( R.id.alert_list_item_header );
holder.header_text = ( TextView ) recycledView.findViewById( R.id.alert_list_item_header_text );
holder.header_count = ( TextView ) recycledView.findViewById( R.id.alert_list_item_header_count );
holder.name = ( TextView ) recycledView.findViewById( R.id.alert_list_item_name );
holder.distance = ( TextView ) recycledView.findViewById( R.id.alert_list_item_distance );
recycledView.setTag( holder );
}
else
{
holder = ( ViewHolder ) recycledView.getTag();
}
holder.header_text.setText( title.substring( 0, space ) );
holder.name.setText( title.substring( space + 1 ) );
holder.header_count.setText( count );
holder.header.setBackgroundResource( resourceID );
return recycledView;
}
}
基本上,您必须始终准备好让 v.getTag()
返回 null 并相应地扩充新的 View
。
关于android - v.getTag() 返回 null 而不是 ViewHolder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6787329/
我从 Web 服务中获取值并将其填充到 textviews 中,我还在某些值上设置标签,因为我必须在单击按钮时将这些值发送到其他 Activity 。但我只得到数组的最后一个值。 txt_TransS
在 View 的子类上有一个 getTag() 方法,它从 .xml 返回 android:tag 属性的值。我希望 MenuItem 也一样...可以将它转换为 View 吗?因为 item 元素还
我在 imageview 上设置了一个标签为“空白”,所以它在 xml 文件中看起来像这样 android:tag="blank" 现在当我运行这个 ((String) buttons[button-
我正在使用 fragment 创建一个 ListView,其中填充了 CheckBoxes。我尽力根据其他问题找到解决方案,但我似乎无法修复它。当我不使用以下命令运行脚本时: convertView.
在我的代码中,我有两个 Activity ,第一个 Activity 在 map 上显示制造商,第二个 Activity 显示有关该标记的信息。在异步任务中,我正在搜索某个位置并将信息对象作为标签添加
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 5 年前。 Improve this ques
我们知道当我们在列表/ GridView 中使用 ViewHolder 模式时,我们使用 setTag/getTag 来获取信息。但是在我的代码中,如果我通过简单的静态 ViewHolder 替换它,
使用其中使用了多个 fragment 的应用程序,并且以下代码用于获取 fragment 的选定位置。 private BaseFragment getSelectedFragment(Fragmen
大家好, 我有一个 ListView,每行包含一个 Button。以下代码是getView()方法的一部分 public View getView(final int position, View c
我尝试使用我的其中一个按钮的 ID 设置标签: int boeserzufall = (int) (Math.random()*23); Button boese = arr.ge
我在这里检查了有关 setTag 和 getTag 的其他问题,但我不明白。我在这里设置标签 buttonA.setOnClickListener(new View.OnClickListene
我被困住了,我需要帮助。我正在尝试使用 set 和 get Tag,但我无法了解它如何用于此操作: 我正在使用 ListView 显示加载到扩展适配器的图像 自定义适配器使用 imageview_1、
是的,我知道在调用这些需要 key 的函数版本时需要一个唯一的资源 ID,但我终究无法弄清楚如何创建可以以这种方式使用的资源 ID。我类的最终变量不会起作用,硬编码值也不会起作用。两者都抛出 Ille
View类型对象的setTag()、getTag()等方法的主要用途是什么? 我是否认为我可以将任意数量的对象与单个 View 相关联? 最佳答案 假设您生成了一堆相似的 View 。您可以为每个 V
本文整理了Java中com.cloud.utils.xmlobject.XmlObject.getTag()方法的一些代码示例,展示了XmlObject.getTag()的具体用法。这些代码示例主要来
我正在尝试在 VS2010 中为自定义文件格式创建一些语法突出显示。在广泛窃取Ook! Language之后msdn 上的示例,我能够突出显示文件中的关键字。我对此很满意。但是,该示例按行分割 Sna
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
第一次启动 ListView 时,标题按预期显示。当我向下滚动并出现时,相同的 ListView ,标题消失。当我删除 set 和 getTag 代码时,这个问题就解决了。但这阻碍了 ListView
我的目标(为了一个简单的例子)是检测对 LinearLayout 内的 ImageView 的点击。使用 RecyclerView 设置一个项目列表,每个项目都由一个 LinearLayout 表示。
我知道基本的不同是 setId() 将 int 作为参数,而 setTag() 将 Object 。我正在询问更多有关实用建议的信息。 当我以编程方式生成更多相同的元素时,我通过 setId(++co
我是一名优秀的程序员,十分优秀!