Android 列表项未显示正确的文本
我有两个Android 列表项未显示正确的文本,android,listview,textview,Android,Listview,Textview,我有两个ListViews让我们称它们为1和2。我将项目添加到ListView 1,然后经过一定时间后,我将项目移动到ListView 2 我遇到的问题是,ListView 1中显示的文本有时(我还没有计算出模式)是错误的-它显示以前创建的项的文本。但当我将其移动到ListView 2时,它会显示正确的文本 我知道视图是循环使用的,因此列表项可能使用旧视图。我不认为它是这样做的,因为它在其他列表中显示了正确的信息 这可能是因为设置文本花费的时间太长,因为getView()方法中有很多文本,所以它
ListView
s让我们称它们为1和2。我将项目添加到ListView 1
,然后经过一定时间后,我将项目移动到ListView 2
我遇到的问题是,ListView 1
中显示的文本有时(我还没有计算出模式)是错误的-它显示以前创建的项的文本。但当我将其移动到ListView 2
时,它会显示正确的文本
我知道视图是循环使用的,因此列表项可能使用旧视图。我不认为它是这样做的,因为它在其他列表中显示了正确的信息
这可能是因为设置文本花费的时间太长,因为getView()
方法中有很多文本,所以它在后台更新时使用旧值。我不知道这是否可行,但即使在调用notifyDataSetChanged()
时,仍会显示错误的信息
这是我的密码:
列表视图1
这是列表的适配器:
public class PendingAdapter extends BaseAdapter {
private List<Map<String, Object>> mPendingItemList;
public PendingAdapter() {
mPendingItemList = DataModel.getInstance().getPendingItemList();
}
@Override
public int getCount() {
return mPendingItemList.size();
}
@Override
public Object getItem(int position) {
return mPendingItemList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (null == convertView) {
convertView = LayoutInflater.from(getActivity()).inflate(
R.layout.pending_item, null);
}
TextView tv_title = (TextView) convertView
.findViewById(R.id.pi_tv_title);
TextView tv_content = (TextView) convertView
.findViewById(R.id.pi_tv_content);
TextView tv_counter = (TextView) convertView
.findViewById(R.id.pi_tv_counter);
TextView tv_ongoing = (TextView) convertView
.findViewById(R.id.pi_tv_ongoing);
TextView tv_type = (TextView) convertView
.findViewById(R.id.pi_tv_type);
TextView tv_date = (TextView) convertView
.findViewById(R.id.pi_tv_date);
@SuppressWarnings("unchecked")
HashMap<String, String> itemDataHashMap = (HashMap<String, String>) getItem(position);
tv_title.setText(itemDataHashMap.get("planet"));
tv_content.setText(itemDataHashMap.get("content"));
tv_counter.setText(itemDataHashMap.get("counter"));
tv_type.setText(itemDataHashMap.get("type"));
tv_ongoing.setText(itemDataHashMap.get("ongoing"));
tv_date.setText(itemDataHashMap.get("date"));
return convertView;
}
}
公共类PendingAdapter扩展了BaseAdapter{
私有列表mPendingItemList;
公共挂起适配器(){
mPendingItemList=DataModel.getInstance().getPendingItemList();
}
@凌驾
public int getCount(){
返回mPendingItemList.size();
}
@凌驾
公共对象getItem(int位置){
返回mPendingItemList.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
if(null==convertView){
convertView=LayoutFlater.from(getActivity())。充气(
R.layout.pending_项,空);
}
TextView tv_title=(TextView)convertView
.findviewbyd(R.id.pi_tv_title);
TextView电视内容=(TextView)convertView
.findviewbyd(R.id.pi_电视内容);
TextView tv_计数器=(TextView)convertView
.findviewbyd(R.id.pi_tv_计数器);
TextView tv_持续=(TextView)convertView
.findviewbyd(R.id.pi_tv_进行中);
TextView tv_type=(TextView)convertView
.findViewById(R.id.pi_tv_类型);
TextView tv_date=(TextView)convertView
.findviewbyd(R.id.pi\u tv\u日期);
@抑制警告(“未选中”)
HashMap itemDataHashMap=(HashMap)getItem(位置);
tv_title.setText(itemDataHashMap.get(“行星”);
tv_content.setText(itemDataHashMap.get(“content”);
tv_counter.setText(itemDataHashMap.get(“计数器”);
tv_type.setText(itemDataHashMap.get(“type”);
tv_consuming.setText(itemDataHashMap.get(“consuming”);
tv_date.setText(itemDataHashMap.get(“日期”);
返回视图;
}
}
我不确定还有哪些代码会有帮助(可能是mPendingItemList
)-但是如果更多的代码会有帮助,请说:-)。//试试这个
公共类PendingAdapter扩展BaseAdapter{
私有列表mPendingItemList;
公共挂起适配器(){
mPendingItemList=DataModel.getInstance().getPendingItemList();
}
@凌驾
public int getCount(){
返回mPendingItemList.size();
}
@凌驾
公共对象getItem(int位置){
返回mPendingItemList.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视窗座;
if(null==convertView){
convertView=LayoutFlater.from(getActivity())。充气(
R.layout.pending_项,空);
holder=新的ViewHolder();
holder.tv_title=(TextView)convertView
.findviewbyd(R.id.pi_tv_title);
holder.tv_content=(TextView)convertView
.findviewbyd(R.id.pi_电视内容);
holder.tv_计数器=(TextView)convertView
.findviewbyd(R.id.pi_tv_计数器);
holder.tv_持续=(TextView)convertView
.findviewbyd(R.id.pi_tv_进行中);
holder.tv_type=(TextView)convertView
.findViewById(R.id.pi_tv_类型);
holder.tv_date=(TextView)convertView
.findviewbyd(R.id.pi\u tv\u日期);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
@抑制警告(“未选中”)
HashMap itemDataHashMap=(HashMap)getItem(位置);
holder.tv_title.setText(itemDataHashMap.get(“行星”);
holder.tv_content.setText(itemDataHashMap.get(“content”);
holder.tv_counter.setText(itemDataHashMap.get(“counter”);
holder.tv_type.setText(itemDataHashMap.get(“type”);
holder.tv_consuming.setText(itemDataHashMap.get(“consuming”);
holder.tv_date.setText(itemDataHashMap.get(“日期”);
convertView.setTag(支架);
返回视图;
}
静态类视窗夹{
文本视图电视标题;
文本查看电视内容;
TextView电视台;
TextView电视节目正在进行中;
文本视图电视类型;
文本查看电视节目日期;
}
}
谢谢
// try this one
public class PendingAdapter extends BaseAdapter {
private List<Map<String, Object>> mPendingItemList;
public PendingAdapter() {
mPendingItemList = DataModel.getInstance().getPendingItemList();
}
@Override
public int getCount() {
return mPendingItemList.size();
}
@Override
public Object getItem(int position) {
return mPendingItemList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (null == convertView) {
convertView = LayoutInflater.from(getActivity()).inflate(
R.layout.pending_item, null);
holder = new ViewHolder();
holder.tv_title = (TextView) convertView
.findViewById(R.id.pi_tv_title);
holder.tv_content = (TextView) convertView
.findViewById(R.id.pi_tv_content);
holder.tv_counter = (TextView) convertView
.findViewById(R.id.pi_tv_counter);
holder.tv_ongoing = (TextView) convertView
.findViewById(R.id.pi_tv_ongoing);
holder.tv_type = (TextView) convertView
.findViewById(R.id.pi_tv_type);
holder.tv_date = (TextView) convertView
.findViewById(R.id.pi_tv_date);
convertView.setTag(holder);
}else {
holder = (ViewHolder) convertView.getTag();
}
@SuppressWarnings("unchecked")
HashMap<String, String> itemDataHashMap = (HashMap<String, String>) getItem(position);
holder.tv_title.setText(itemDataHashMap.get("planet"));
holder.tv_content.setText(itemDataHashMap.get("content"));
holder.tv_counter.setText(itemDataHashMap.get("counter"));
holder. tv_type.setText(itemDataHashMap.get("type"));
holder.tv_ongoing.setText(itemDataHashMap.get("ongoing"));
holder.tv_date.setText(itemDataHashMap.get("date"));
convertView.setTag(holder);
return convertView;
}
static class ViewHolder {
TextView tv_title;
TextView tv_content;
TextView tv_counter;
TextView tv_ongoing;
TextView tv_type;
TextView tv_date;
}
}