解决方案 »

  1.   

    1. notifyDataSetChanged()实际上就是通知ListView,我的数据变了,需要你ListView去刷新,当然会调用getView了。2. 问一下你几个问题:
    1)convertView为何你没有重用?
    2)getView会在创建ListView,滑动的时候等情况都会被反复调用,为什么要在getView中创建new CountDownTimer?你这样做会创建无数个CountDownTimer对象。
    3)为何的你convertView没有绑定数据?3. 建议你先好好看看ListView的用法
      

  2.   

    我的代码是利用了convertView的,完整的如下:@Override
    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 的话不知道还有什么好的方法?
      

  3.   

    为什么在getview里面删除??要删除就删除你那个存放内容的list,把不需要的那个remove掉,然后再通知界面更新,肯定不会有问题的。不要做的这么混淆
      

  4.   

    listview 说白了就是用来显示list中的信息,你把list修改后再通知界面更新显示就可以了
      

  5.   

    网上动态添加删除不是这样写的吗? 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; } }
      

  6.   

    为啥子你要在getView里面删除呢
      

  7.   

    我是看网上的例子,是在getview 中删的(见上排代码)否则在哪个地方写删除语句,同时还能同步呢?
      

  8.   

    你的问题很好解决的把定时器和监听去全部拿出adapter,将他们在listview的onitemlistenner里面去做。