适配器未正确从 ArrayList 填充
Adapter Not Populating From ArrayList Properly
我创建了一个适配器,并试图用 String ArrayList 中的数据填充 ListView。我注意到,存储在我的 ArrayList 中的每第 4、8 和 12 个项目都没有出现在我的 ListView 中。如果我删除 if/else (view == null) 条件,一切正常,除了我收到 lint 警告 >> Unconditional layout inflation from view adapter: Should use View Holder pattern (use recycled view passed into this method as the second parameter) for smoother scrolling
这是我的 getView 代码,每第 4、8、12 项跳过一次
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View view = convertView;
ViewHolder holder;
if (view == null) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.item_select, null);
holder = new ViewHolder();
holder.rlLeft = (RelativeLayout) view.findViewById(R.id.rl_left);
holder.rlRight = (RelativeLayout) view.findViewById(R.id.rl_right);
holder.tvTitle = (TextView) view.findViewById(R.id.tv_title);
holder.tvLeftBubble = (TextView) view.findViewById(R.id.tv_left_bubble);
holder.tvRightBubble = (TextView) view.findViewById(R.id.tv_right_bubble);
holder.tvTitle.setText(mArrySelect.get(position).getTitle());
// set visibility gone on views
if (position % 2 == 0) {
holder.rlLeft.setVisibility(View.GONE);
holder.tvRightBubble.setText(mArrySelect.get(position).getMessage());
} else {
holder.rlRight.setVisibility(View.GONE);
holder.tvLeftBubble.setText(mArrySelect.get(position).getMessage());
}
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
return view;
}
这是有效的代码,它显示了我的 mArraySelect(字符串数组列表)中的所有项目,但在我的 inflate
中给出了 lint 警告
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View view = convertView;
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.item_select, null);
holder = new ViewHolder();
holder.rlLeft = (RelativeLayout) view.findViewById(R.id.rl_left);
holder.rlRight = (RelativeLayout) view.findViewById(R.id.rl_right);
holder.tvTitle = (TextView) view.findViewById(R.id.tv_title);
holder.tvLeftBubble = (TextView) view.findViewById(R.id.tv_left_bubble);
holder.tvRightBubble = (TextView) view.findViewById(R.id.tv_right_bubble);
holder.tvTitle.setText(mArrySelect.get(position).getTitle());
// set visibility gone on views
if (position % 2 == 0) {
holder.rlLeft.setVisibility(View.GONE);
holder.tvRightBubble.setText(mArrySelect.get(position).getMessage());
} else {
holder.rlRight.setVisibility(View.GONE);
holder.tvLeftBubble.setText(mArrySelect.get(position).getMessage());
}
}
任何人都知道我在我的第一个实现中缺少什么导致跳过视图?我的 mod 条件只是交替两个不同的视图,而且效果很好。只是我的 String ArrayList 中的第 4、8 和 12 项没有显示。该数组只有 12 项。
提前致谢!
将以下代码移出最外层的 if 块可以解决此问题-
// set visibility gone on views
if (position % 2 == 0) {
holder.rlLeft.setVisibility(View.GONE);
holder.tvRightBubble.setText(mArrySelect.get(position).getMessage());
} else {
holder.rlRight.setVisibility(View.GONE);
holder.tvLeftBubble.setText(mArrySelect.get(position).getMessage());
}
将其放在 return 语句的正上方。
我创建了一个适配器,并试图用 String ArrayList 中的数据填充 ListView。我注意到,存储在我的 ArrayList 中的每第 4、8 和 12 个项目都没有出现在我的 ListView 中。如果我删除 if/else (view == null) 条件,一切正常,除了我收到 lint 警告 >> Unconditional layout inflation from view adapter: Should use View Holder pattern (use recycled view passed into this method as the second parameter) for smoother scrolling
这是我的 getView 代码,每第 4、8、12 项跳过一次
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View view = convertView;
ViewHolder holder;
if (view == null) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.item_select, null);
holder = new ViewHolder();
holder.rlLeft = (RelativeLayout) view.findViewById(R.id.rl_left);
holder.rlRight = (RelativeLayout) view.findViewById(R.id.rl_right);
holder.tvTitle = (TextView) view.findViewById(R.id.tv_title);
holder.tvLeftBubble = (TextView) view.findViewById(R.id.tv_left_bubble);
holder.tvRightBubble = (TextView) view.findViewById(R.id.tv_right_bubble);
holder.tvTitle.setText(mArrySelect.get(position).getTitle());
// set visibility gone on views
if (position % 2 == 0) {
holder.rlLeft.setVisibility(View.GONE);
holder.tvRightBubble.setText(mArrySelect.get(position).getMessage());
} else {
holder.rlRight.setVisibility(View.GONE);
holder.tvLeftBubble.setText(mArrySelect.get(position).getMessage());
}
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
return view;
}
这是有效的代码,它显示了我的 mArraySelect(字符串数组列表)中的所有项目,但在我的 inflate
中给出了 lint 警告 @Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View view = convertView;
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.item_select, null);
holder = new ViewHolder();
holder.rlLeft = (RelativeLayout) view.findViewById(R.id.rl_left);
holder.rlRight = (RelativeLayout) view.findViewById(R.id.rl_right);
holder.tvTitle = (TextView) view.findViewById(R.id.tv_title);
holder.tvLeftBubble = (TextView) view.findViewById(R.id.tv_left_bubble);
holder.tvRightBubble = (TextView) view.findViewById(R.id.tv_right_bubble);
holder.tvTitle.setText(mArrySelect.get(position).getTitle());
// set visibility gone on views
if (position % 2 == 0) {
holder.rlLeft.setVisibility(View.GONE);
holder.tvRightBubble.setText(mArrySelect.get(position).getMessage());
} else {
holder.rlRight.setVisibility(View.GONE);
holder.tvLeftBubble.setText(mArrySelect.get(position).getMessage());
}
}
任何人都知道我在我的第一个实现中缺少什么导致跳过视图?我的 mod 条件只是交替两个不同的视图,而且效果很好。只是我的 String ArrayList 中的第 4、8 和 12 项没有显示。该数组只有 12 项。
提前致谢!
将以下代码移出最外层的 if 块可以解决此问题-
// set visibility gone on views
if (position % 2 == 0) {
holder.rlLeft.setVisibility(View.GONE);
holder.tvRightBubble.setText(mArrySelect.get(position).getMessage());
} else {
holder.rlRight.setVisibility(View.GONE);
holder.tvLeftBubble.setText(mArrySelect.get(position).getMessage());
}
将其放在 return 语句的正上方。