listview 自动 删除一行 导致 getview() 重复执行 listview getview()notifyDataSetChanged删除 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1. notifyDataSetChanged()实际上就是通知ListView,我的数据变了,需要你ListView去刷新,当然会调用getView了。2. 问一下你几个问题:1)convertView为何你没有重用?2)getView会在创建ListView,滑动的时候等情况都会被反复调用,为什么要在getView中创建new CountDownTimer?你这样做会创建无数个CountDownTimer对象。3)为何的你convertView没有绑定数据?3. 建议你先好好看看ListView的用法 我的代码是利用了convertView的,完整的如下:@Overridepublic View getView(final int position, View convertView, ViewGroup arg2) { TextView title = null; TextView text = null; ImageView ivw = null; final ViewHolder holder; if(convertView == null){ convertView = inflater.inflate(R.layout.tab1_lvwitem, null); //得到当前条目的数据 title = (TextView)convertView.findViewById(R.id.tab1_ItemTitle); text = (TextView)convertView.findViewById(R.id.tab1_ItemText); ivw = (ImageView) convertView.findViewById(R.id.tab1_ItemImage); holder = new ViewHolder(); //得到各个控件的对象 holder.title = title; holder.text = text; holder.ivw = ivw; convertView.setTag(holder);//绑定ViewHolder对象 } else { holder = (ViewHolder) convertView.getTag(); } if (position == getCount()-1) { holder.title.setText(Tab2Fragment.ItemTitle + " p"+position); holder.ivw.setImageResource(R.drawable.play); iItemText = Integer.parseInt(Tab2Fragment.ItemText); Log.i("getView",String.valueOf(position)); new CountDownTimer(iItemText *1000, 1000) { public void onTick(long millisUntilFinished) { holder.text.setText(dealTime(millisUntilFinished / 1000) + " / " + dealTime(iItemText)); } public void onFinish() { holder.text.setText("TimeOut!"); Log.i("time out",String.valueOf(position)); if (Tab1Fragment.tab1_listItemAdapter.arr.size()-1 >= position) { tab1_listItemAdapter.arr.remove(position); tab1_listItemAdapter.notifyDataSetChanged(); list.invalidateViews(); } } }.start(); } // 返回LinearLayout实例 return convertView;}现在的问题的确是如何在getview()中实现倒计时,并删除倒计时完毕的项不new CountDownTimer 的话不知道还有什么好的方法? 为什么在getview里面删除??要删除就删除你那个存放内容的list,把不需要的那个remove掉,然后再通知界面更新,肯定不会有问题的。不要做的这么混淆 listview 说白了就是用来显示list中的信息,你把list修改后再通知界面更新显示就可以了 网上动态添加删除不是这样写的吗? private class MyAdapter extends BaseAdapter { private Context context; private LayoutInflater inflater; public ArrayList<String> arr; public MyAdapter(Context context) { super(); this.context = context; inflater = LayoutInflater.from(context); arr = new ArrayList<String>(); for (int i = 0; i < 3; i++) { // listview初始化3个子项 arr.add(""); } } @Override public int getCount() { // TODO Auto-generated method stub return arr.size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return arg0; } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return arg0; } @Override public View getView(final int position, View view, ViewGroup arg2) { // TODO Auto-generated method stub if (view == null) { view = inflater.inflate(R.layout.listview_item, null); } final EditText edit = (EditText) view.findViewById(R.id.edit); edit.setText(arr.get(position)); // 在重构adapter的时候不至于数据错乱 Button del = (Button) view.findViewById(R.id.del); edit.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { // TODO Auto-generated method stub if (arr.size() > 0) { arr.set(position, edit.getText().toString()); } } }); del.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub // 从集合中删除所删除项的EditText的内容 arr.remove(position); adapter.notifyDataSetChanged(); } }); return view; } } 为啥子你要在getView里面删除呢 我是看网上的例子,是在getview 中删的(见上排代码)否则在哪个地方写删除语句,同时还能同步呢? 你的问题很好解决的把定时器和监听去全部拿出adapter,将他们在listview的onitemlistenner里面去做。 一个常见的布局 如何实现 没有名字的struct 点击spinner触发系统消息栏,如何解决? Unable to start activity ComponentInfo{mars.activity04/mars.activity04.SecondAct 想在pc上面运行android应用软件,请问该如何操作? 安卓手机1G内存和2G内存,对速度影响大吗? 应用被后台进程杀死后数据恢复问题 求助怎么解决seekbar中,thumb的缩放问题 安卓usb驱动问题 【C开发安卓?】最近开始接触公司产品的代码 android开发中,Bundle和Intent的联系和区别? 如何开启GPS?
1)convertView为何你没有重用?
2)getView会在创建ListView,滑动的时候等情况都会被反复调用,为什么要在getView中创建new CountDownTimer?你这样做会创建无数个CountDownTimer对象。
3)为何的你convertView没有绑定数据?3. 建议你先好好看看ListView的用法
public View getView(final int position, View convertView, ViewGroup arg2) {
TextView title = null;
TextView text = null;
ImageView ivw = null;
final ViewHolder holder;
if(convertView == null){
convertView = inflater.inflate(R.layout.tab1_lvwitem, null);
//得到当前条目的数据
title = (TextView)convertView.findViewById(R.id.tab1_ItemTitle);
text = (TextView)convertView.findViewById(R.id.tab1_ItemText);
ivw = (ImageView) convertView.findViewById(R.id.tab1_ItemImage);
holder = new ViewHolder();
//得到各个控件的对象
holder.title = title;
holder.text = text;
holder.ivw = ivw;
convertView.setTag(holder);//绑定ViewHolder对象
}
else
{
holder = (ViewHolder) convertView.getTag();
}
if (position == getCount()-1)
{
holder.title.setText(Tab2Fragment.ItemTitle + "
p"+position);
holder.ivw.setImageResource(R.drawable.play);
iItemText = Integer.parseInt(Tab2Fragment.ItemText);
Log.i("getView",String.valueOf(position));
new CountDownTimer(iItemText *1000, 1000) {
public void onTick(long millisUntilFinished) {
holder.text.setText(dealTime(millisUntilFinished / 1000) + " / "
+ dealTime(iItemText));
}
public void onFinish() { holder.text.setText("TimeOut!");
Log.i("time out",String.valueOf(position));
if (Tab1Fragment.tab1_listItemAdapter.arr.size()-1 >= position)
{
tab1_listItemAdapter.arr.remove(position);
tab1_listItemAdapter.notifyDataSetChanged();
list.invalidateViews();
}
}
}.start();
}
// 返回LinearLayout实例
return convertView;
}
现在的问题的确是如何在getview()中实现倒计时,并删除倒计时完毕的项
不new CountDownTimer 的话不知道还有什么好的方法?
private LayoutInflater inflater;
public ArrayList<String> arr;
public MyAdapter(Context context) { super();
this.context = context;
inflater = LayoutInflater.from(context);
arr = new ArrayList<String>();
for (int i = 0; i < 3; i++) { // listview初始化3个子项
arr.add("");
}
} @Override
public int getCount() {
// TODO Auto-generated method stub
return arr.size();
} @Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return arg0;
} @Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
} @Override
public View getView(final int position, View view, ViewGroup arg2) { // TODO Auto-generated method stub
if (view == null) {
view = inflater.inflate(R.layout.listview_item, null);
} final EditText edit = (EditText) view.findViewById(R.id.edit);
edit.setText(arr.get(position)); // 在重构adapter的时候不至于数据错乱
Button del = (Button) view.findViewById(R.id.del);
edit.setOnFocusChangeListener(new OnFocusChangeListener() { @Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
if (arr.size() > 0) {
arr.set(position,
edit.getText().toString());
}
}
}); del.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
// 从集合中删除所删除项的EditText的内容
arr.remove(position);
adapter.notifyDataSetChanged();
}
}); return view; } }