在自定义ListView中更新TextView

时间:2011-10-07 11:17:33

标签: android listview textview refresh intervals

我正在尝试以设定的时间间隔更新自定义ListView中的TextView,例如TextView将每200ms更新一次但是我无法弄清楚如何执行此操作。该对象在内部用数字更新,我想在mTitleText Textview中显示,但是下面的代码显示我只能在用户按下按钮时实现它。

public class ListAdapter extends BaseAdapter {
private ArrayList< Object > mObjects;
private int mNumObjs = 0;

private LayoutInflater mLayoutInflater;
private Context mContext;

public ListAdapter ( Context context, ArrayList< Object > objects ) {
    mObjects;= objects;
    mLayoutInflater = LayoutInflater.from(context);
    mContext = context;
}

public int getCount() {
    return mObjects;.size();
}

public Object getItem( int position ) {
    return mObjects;.get(position);
}

public long getItemId( int position ) {
    return position;
}

public void addObject( Object obj) {
    obj.setId(mNumObjs);
    mObjects.add( obj );
    (mNumObjs);++;
    notifyDataSetChanged();
}

public void deleteObject( int pos ) {
    mObjects;.remove( pos );
    notifyDataSetChanged();
}

public View getView( final int position, View convertView, ViewGroup parent ) {
    final TimerView holder;

    if( convertView == null ) {
        convertView = mLayoutInflater.inflate( R.layout.customlistview, null );

        holder = new HolderView();
        holder.mListPosition = position;
        holder.mDeleteButton = (Button)convertView.findViewById(R.id.Delete);
        holder.mDeleteButton.setText( "Button No: " + position );
        holder.mDeleteButton.setOnClickListener( new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                deleteObject(holder.mListPosition);
            }
        });

        holder.mButton = (Button)convertView.findViewById(R.id.Button);
        holder.mButton.setOnClickListener( new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Object obj = mObjects.get(holder.mListPosition);

                mTitleText.setText(obj.getNum());
            }
        });

        convertView.setTag(holder);
    }
    else {
        holder = (TimerView) convertView.getTag();
    }
    holder.mListPosition = position;
    holder.mDeleteButton.setText( "Button No: " + position );

    return convertView;
}

class HolderView{
    int mListPosition;
    Button mDeleteButton;
    Button mButton;

    TextView mTitleText;
}
}

2 个答案:

答案 0 :(得分:1)

好吧我设法自己解决这个问题,如果您的更新不需要非常频繁(> 1秒),您可以使用notifyDataSetChanged()但是如果像我这样你需要每隔200ms左右不断更新listview您需要遍历列表视图上的可见对象并更新它。

private Runnable showUpdate = new Runnable(){
    public void run(){
        mAdapter.updateList();
        //mAdapter.notifyDataSetChanged();
        int count = mListView.getCount();

        for( int i = 0; i < count; i ++ )
        {
            View convertView = mListView.getChildAt( i );

            if( convertView != null )
            {
                HolderView holder = (HolderView) convertView.getTag();

                Object obj = (Object)mAdapter.getItem( holder.mListPosition );

                holder.mTitleText.setText( obj.getText() );
            }
        }
    }
};

Thread mThread = new Thread()
{
    @Override
    public void run() {
       try {
            while(true) {
                sleep(100);
                mHandler.post(showUpdate);

                //mHandler.sendEmptyMessage(MSG_UPDATE);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
};

答案 1 :(得分:0)

更新列表mObjects中的文字,然后拨打适配器上的notifyDataSetChanged()