android 支持分組和聯系人展示的一個小例子

jopen 10年前發布 | 27K 次閱讀 Android Android開發 移動開發

先看效果圖:

20140727214644760.jpg

 

 

要實現這個效果,activity必須實現ExpandableListActivity

    @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
mContactListView = getExpandableListView();
mContactListView.setBackgroundResource(R.drawable.default_bg);
registerForContextMenu(mContactListView);
mContactDataBase = ((ContactApplication) getApplication())
.getmContactDataBase();

    getExpandableListView().setCacheColorHint(0);// 拖動時避免出現黑色  
    getExpandableListView().setDivider(null);// 去掉每項下面的黑線(分割線)  
    // 自定義下拉圖標  
    getExpandableListView().setGroupIndicator(  
            getResources().getDrawable(R.drawable.expander_ic_folder));  
    setAdatperForExpandableListView();  
}  

/** 
 * 設置ExpandableListView的adapter 
 */  
private void setAdatperForExpandableListView() {  
    Cursor groupCursor = mContactDataBase.getAllGroups();  //這個是從數據庫里查詢出所有的組  
    Util.d(TAG, "groupCursor=" + groupCursor);  
    // curosr的生命周期將和activity有關  
    startManagingCursor(groupCursor);  

    // set my adapter  
    <strong>ContactTreeAdapter </strong>contactTreeAdapter = new ContactTreeAdapter(  
            groupCursor, this, true, mContactDataBase);  
    setListAdapter(contactTreeAdapter);  
}  </pre><a class="CopyToClipboard" title="copy" href="/misc/goto?guid=4959555922166694659"></a></div>

</div> </div>
主要實現ContactTreeAdapter這個adapter

public class ContactTreeAdapter extends CursorTreeAdapter {

/** log tag. */  
private static final String TAG = "ContactTreeAdapter";  

/** context */  
public Context mContext = null;  
private Cursor mCursor = null;  

private ContactDataBase mContactDataBase;  

// contact表字段索引  
private static final int INDEX_NAME = 1;  
private static final int INDEX_PHONENUMBER = 2;  

// group表字段索引  
private static final int INDEX_GROUPNAME = 1;  

public ContactTreeAdapter(Cursor cursor, Context context,  
        boolean autoRequery, ContactDataBase contactDataBase) {  
    super(cursor, context, autoRequery);  
    mContext = context;  
    this.mContactDataBase = contactDataBase;  
    // TODO Auto-generated constructor stub  
}  

@Override  
protected Cursor getChildrenCursor(Cursor groupCursor) {  
    // TODO Auto-generated method stub  
    String groupName = groupCursor.getString(INDEX_GROUPNAME);// 得到當前的組名  
    Cursor childCursor = mContactDataBase.getContactsByGroupName(groupName);  
    return childCursor;  
}  

@Override  
protected View newGroupView(Context context, Cursor cursor,  
        boolean isExpanded, ViewGroup parent) {  
    // TODO Auto-generated method stub  
    Util.d(TAG, "newGroupView");  
    LayoutInflater inflate = LayoutInflater.from(mContext);  
    View view = inflate.inflate(R.layout.grouplayout, null);  
    bindGroupView(view, context, cursor, isExpanded);  
    return view;  

}  

@Override  
protected void bindGroupView(View view, Context context, Cursor cursor,  
        boolean isExpanded) {  
    // TODO Auto-generated method stub  
    Util.d(TAG, "bindGroupView");  
    TextView groupName = (TextView) view.findViewById(R.id.groupName);  
    String group = cursor.getString(INDEX_GROUPNAME);  
    groupName.setText(group);  

    TextView groupCount = (TextView) view.findViewById(R.id.groupCount);  
    int count = mContactDataBase.getCountContactByGroupName(group);  
    Util.d(TAG, "count=" + count + "group=" + group);  
    groupCount.setText("[" + count + "]");  
}  

@Override  
protected View newChildView(Context context, Cursor cursor,  
        boolean isLastChild, ViewGroup parent) {  
    // TODO Auto-generated method stub  
    Util.d(TAG, "newChildView");  
    LayoutInflater inflate = LayoutInflater.from(mContext);  
    View view = inflate.inflate(R.layout.childlayout, null);  
    bindChildView(view, context, cursor, isLastChild);  
    return view;  
}  

@Override  
protected void bindChildView(View view, Context context, Cursor cursor,  
        boolean isLastChild) {  
    // TODO Auto-generated method stub  
    Util.d(TAG, "bindChildView cursor.getString(INDEX_PHONENUMBER)="  
            + cursor.getString(INDEX_PHONENUMBER));  
    TextView name = (TextView) view.findViewById(R.id.name);  
    name.setText(cursor.getString(INDEX_NAME));  

    TextView description = (TextView) view.findViewById(R.id.description);  
    description.setTextKeepState(cursor.getString(INDEX_PHONENUMBER));  
}  

}</pre>
因為這個adapter的函數命名就可以看出是干什么的就不一一解釋了
來自:http://blog.csdn.net/baidu_nod/article/details/38182539

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!