CursorAdapter类的使用

来源:互联网 发布:淘宝代购网店 注册 编辑:程序博客网 时间:2024/04/30 12:23
CursorAdapter继承于BaseAdapter,它是个虚类,它为cursor和ListView提供了连接的桥梁。           
public abstract class
    CursorAdapter
        extends BaseAdapter
直接子类只有ResourceCursorAdapter
Class Overview
Adapter that exposes data from Cursor to ListView widget. 
The Cursor must include column named "_id" or this class will not work.

注意cursor的必须要有个命名为"_id"的列。比如Contacts._ID就为"_id"
必须实现以下函数
abstract View        newView(Context  context, Cursor  cursor, ViewGroup  parent)
    Makes new view to hold the data pointed to by cursor.
abstract void        bindView(View  view, Context  context, Cursor  cursor)
    Bind an existing view to the data pointed to by cursor
注意
newView该函数第一次回调用后,如果数据增加后也会再调用,但是重绘是不会调用的。
数据增加后,回调用该函数来生成与新增数据相对应的view。
bindView函数第一次回调用后,如果数据更新也会再调用,但重绘会再次调用的。
【总的来说应该是在调用bindView如果发现view为空会先调用newView来生成view】
import java.util.List;
import android.app.Activity;
import android.app.ListActivity;
import android.os.Bundle;
import android.os.Handler;
import android.content.Context;
import android.content.ContentValues;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ListView;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CursorAdapter;
import android.widget.TextView;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.RawContacts;
import android.view.View.OnClickListener;     
import android.widget.Button; 
public class HelloCursor extends ListActivity {
    private static String[] PROJECTION new String[] Contacts._ID,
            Contacts.DISPLAY_NAME };

 
   
    @Override

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Cursor getContentResolver().query(Contacts.CONTENT_URI, PROJECTION,
                null, null, Contacts.DISPLAY_NAME COLLATE NOCASE");
        startManagingCursor(c);
        MyCursorAdapter adapter new MyCursorAdapter(this, R.layout.list_row,
                c);
        this.setListAdapter(adapter);
        Button button (Button)findViewById(R.id.Button01); 
        OnClickListener listener=new OnClickListener(){
            @Override    
            public void onClick(View v)     
                doAction();     

                    
        };
        button.setOnClickListener(listener);
        mHandler new Handler();
       
    }

    private String[] mStrings "hubin", "hudashi", "robin" };
    int cnt 0;
     private Handler mHandler;
    
    class AddContactThread implements Runnable {
        public void run() {
            int nStringLength mStrings.length;
            int randomNumber 0;
            ContentValues newValues new ContentValues();
            String tempString null;
            randomNumber (int) (Math.random() 10);
            for (int 0; nStringLength; i++) {
                tempString mStrings cnt randomNumber;
                newValues.put(Contacts.DISPLAY_NAME, tempString);
                getContentResolver().insert(RawContacts.CONTENT_URI, newValues);
                newValues.clear();

            }
            cnt++;
        }
    }
    AddContactThread addContact=new AddContactThread();
    void 
doAction()
    {
         mHandler.post(addContact);
    }
}
class 
MyCursorAdapter extends CursorAdapter {
    Context  context=null;
    int viewResId;
    public MyCursorAdapter(Context context, int resource, Cursor cursor) {
        super(context,cursor);
        viewResId=resource;
    }
    
public View newView(Context context, Cursor cursor, ViewGroup parent) {
        
        TextView view =null;
       LayoutInflater vi null;
       vi (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
       view =(TextView)vi.inflate(viewResId, parent, false);

           //v =(TextView)vi.inflate(textViewResourceId,null);
       Log.i("hubin","newView"+view);
        return view;
    }
    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        Log.i("hubin","bind"+view);
        TextView nameView (TextView) view;
        // Set the name
        nameView.setText(cursor
                .getString(cursor.getColumnIndex("DISPLAY_NAME")));
    }
}

附1:关于newView和bindView一测试结果
newView android.widget.TextView@43b98ea0
bind android.widget.TextView@43b98ea0
newView android.widget.TextView@43b99948
bind android.widget.TextView@43b99948
newView android.widget.TextView@43b9a3f0
bind android.widget.TextView@43b9a3f0
add
bind android.widget.TextView@43b9a3f0
bind android.widget.TextView@43b99948
bind android.widget.TextView@43b98ea0
newView android.widget.TextView@43b9c5b0
bind android.widget.TextView@43b9c5b0
newView android.widget.TextView@43b9d058
bind android.widget.TextView@43b9d058
newView android.widget.TextView@43b9db00
bind android.widget.TextView@43b9db00
0 0
原创粉丝点击