- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 ListView 上遇到了 View 持有者的充气问题。实现 Viewholder 后,充气机会出错,因此消息显示错误。 (在图 10 中,消息不是来 self ,而且每当我滚动时,错误的消息都会发生变化,我变成 7,4 或任何其他,就好像它随机使用充气机一样)
我有 2 种不同的充气机,一种用于显示他们的个人资料图像,另一种用于我。
这是代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
if(messageList.get(position).getSenderRealId() != relevantId)
{
convertView = getLayoutInflater().inflate(R.layout.message_detail_row_my_inflater, parent, false);
}else{
convertView = getLayoutInflater().inflate(R.layout.message_detail_row_their_inflater, parent, false);
}
viewHolder = new ViewHolder();
viewHolder.messageDateText = (CustomFontTextView) findViewById(R.id.messageDateText);
viewHolder.profileImageView = (SquareImageView) findViewById(R.id.profileImageView);
viewHolder.messageBubbleLayout = (LinearLayout) convertView.findViewById(R.id.messageBubbleLayout);
viewHolder.messageText = (CustomFontTextView) viewHolder.messageBubbleLayout.findViewById(R.id.message_text);
viewHolder.messageHourText = (CustomFontTextView) viewHolder.messageBubbleLayout.findViewById(R.id.messageHourText);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder)convertView.getTag();
}
viewHolder.messageText.setText(messageList.get(position).getMessage());
viewHolder.messageHourText.setText(Constants.hourFormat.format(messageList.get(position).getSendTime()));
return convertView;
}
和viewHolderClass:
static class ViewHolder {
CustomFontTextView messageDateText;
SquareImageView profileImageView;
LinearLayout messageBubbleLayout;
CustomFontTextView messageText;
CustomFontTextView messageHourText;
}
目前,我只设置了 messageHour 和 messageText,但除图像之外的所有组件都位于线性布局(messageBubbleLayout)内,我认为这不会导致问题。
感谢您的帮助
最佳答案
由于您在这里使用两种不同的布局,因此您应该使用 Android 的机制来正确重用 ConvertView。
在此处查看教程:
http://antoine-merle.com/blog/2013/06/11/making-a-multiple-view-type-adapter-with-annotations/
在您的情况下,您只有两种类型的 View :“我的”和“他们的”,因此重写 getViewTypeCount()
方法以返回 2,并 getItemViewType()
根据位置返回正确的类型。
关于java - 多个充气机上的 ViewHolder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26122525/
想问一下。有什么区别: LayoutInflater layoutInflater = (LayoutInflater) getBaseContext().getSystemService(Conte
我正在使用 RecyclerView 来保存 CardView 列表。在我运行 Lollipop 5.0.2 的设备上,应用程序运行良好并且列表正确显示数据。然而,在其他 Lollipop 之前的设备
简单:我想用 1 个宽度为 0dp 的子项来膨胀父项。 父级 xml: 子类: public class KeyButton extends RelativeLayout implements Vi
我正在尝试创建一个 android 键盘,现在我希望它只是膨胀,即显示来自 main.xml 的线性布局 这是java文件 package keyboard.rob.com; import ... p
我有以下适配器 public class CardAdapter extends RecyclerView.Adapter{ List list; int id; Context context;
我的 main.xml 中目前有一个 DrawerLayout。 AppBarLayout 中包含了一个 Toolbar,然后是一个简单的 LinearLayout 来交换 fragment 。 我导
由于不推荐使用 Kotlin Synthetics,我们正在迁移到 ViewBinding。 我已经尝试了很多关于 ViewStub、ViewBinding 的谷歌搜索和阅读文档,并为 Fragmen
我无法使用 LayoutInflater 扩充 xml(包含 QuickContactBadge 的布局)文件,以便在 ListView 中使用它。它不会产生编译/运行时错误或正确的预期输出。从 XM
我是一名优秀的程序员,十分优秀!