android viewpage的使用
在使用之前要加support.v4包哦,一般在D:\android-sdk-windows\extras\android\support\v4目录下面,好像4.0以后见工程的时候自动加载的......

下面贴代码及效果图:


mainactivity类代码如下:

package com.xy.viewpager;

import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.BitmapFactory;

public class MainActivity extends Activity {
	private ViewPager mPager;// 页卡内容
	private List<View> listViews; // Tab页面列表
	private ImageView cursor;// 动画图片
	private TextView t1, t2, t3;// 页卡头标
	private int offset = 0;// 动画图片偏移量
	private int currIndex = 0;// 当前页卡编号
	private int bmpW;// 动画图片宽度
	MyPagerAdapter adapter;
	LayoutInflater mInflater;

	RelativeLayout rel;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Log.i("Viewpage", "--onCreate--");
		initImageView();
		initTextView();
		initPageView();

	}

	private void initPageView() {
		mInflater = getLayoutInflater();
		listViews = new ArrayList<View>();
		listViews.add(mInflater.inflate(R.layout.layou1, null));
		listViews.add(mInflater.inflate(R.layout.layou2, null));
		listViews.add(mInflater.inflate(R.layout.layou3, null));
		adapter = new MyPagerAdapter(listViews);
		mPager = (ViewPager) findViewById(R.id.page);
		mPager.setAdapter(adapter);
		mPager.setCurrentItem(0);
		mPager.setOnPageChangeListener(new MyOnPageChangeListener());
	}

	private void initTextView() {
		t1 = (TextView) findViewById(R.id.tab1);
		t2 = (TextView) findViewById(R.id.tab2);
		t3 = (TextView) findViewById(R.id.tab3);
		t1.setOnClickListener(new MyOnClickListener(0));
		t2.setOnClickListener(new MyOnClickListener(1));
		t3.setOnClickListener(new MyOnClickListener(2));
	}

	private void initImageView() {
		cursor = (ImageView) findViewById(R.id.cursor);
		rel = (RelativeLayout) findViewById(R.id.layout);
		

		bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.png)
				.getWidth();
		DisplayMetrics dm = new DisplayMetrics();
		getWindowManager().getDefaultDisplay().getMetrics(dm);
		int screenW = dm.widthPixels;
		offset = (screenW / 3 - bmpW) / 2;
		// Matrix matrix = new Matrix();
		// matrix.postTranslate(offset, 0);
		cursor.setBackgroundResource(R.drawable.png);
		// cursor.setScaleType(ScaleType.MATRIX);
		// cursor.setImageMatrix(matrix);
		rel.setPadding(offset, 0, 0, 0);

	}

	public class MyOnClickListener implements View.OnClickListener {
		private int index = 0;

		public MyOnClickListener(int i) {
			index = i;
		}

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			mPager.setCurrentItem(index);
		}
	}

	public class MyPagerAdapter extends PagerAdapter implements OnClickListener {
		public List<View> mListViews;
		public View v1;
		public View v2;
		public View v3;
		public Button mButton;

		public MyPagerAdapter(List<View> mListViews) {
			this.mListViews = mListViews;
			getViewClickListener(mListViews);
		}

		public void getViewClickListener(List<View> listview) {
			v1 = listview.get(0);
			v2 = listview.get(1);
			v3 = listview.get(2);
			mButton = (Button) v1.findViewById(R.id.button);
			mButton.setOnClickListener(this);
		}

		public void destroyItem(View arg0, int arg1, Object arg2) {
			((ViewPager) arg0).removeView(mListViews.get(arg1));
		}

		public void finishUpdate(View arg0) {
		}

		@Override
		public int getCount() {
			return mListViews.size();
		}

		@Override
		public Object instantiateItem(View arg0, int arg1) {
			((ViewPager) arg0).addView(mListViews.get(arg1), 0);
			return mListViews.get(arg1);
		}

		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			return arg0 == (arg1);
		}

		@Override
		public void restoreState(Parcelable arg0, ClassLoader arg1) {
		}

		@Override
		public Parcelable saveState() {
			return null;
		}

		@Override
		public void startUpdate(View arg0) {
		}

		@Override
		public void onClick(View v) {
			AlertDialog dialog = new AlertDialog.Builder(MainActivity.this)
					.setIcon(null)
					.setTitle("dialog")
					.setMessage("nihao")
					.setPositiveButton("确定",
							new DialogInterface.OnClickListener() {

								@Override
								public void onClick(DialogInterface arg0,
										int arg1) {

									MainActivity.this.finish();

								}

								})
					.setNegativeButton("取消",
							new DialogInterface.OnClickListener() {

								@Override
								public void onClick(DialogInterface arg0,
										int arg1) {

								}

							}).create();

			// 显示对话框也可以使用showDialog(int id)方法显示对话框

			dialog.show();
		}
	}

	public class MyOnPageChangeListener implements OnPageChangeListener {

		int one = offset * 2 + bmpW;// 页卡1 -> 页卡2 偏移量
		int two = one * 2;// 页卡1 -> 页卡3 偏移量

		@Override
		public void onPageSelected(int arg0) {
			Animation animation = null;
			switch (arg0) {
			case 0:
				if (currIndex == 1) {
					animation = new TranslateAnimation(one, 0, 0, 0);
				} else if (currIndex == 2) {
					animation = new TranslateAnimation(two, 0, 0, 0);
				}
				break;
			case 1:
				if (currIndex == 0) {
					animation = new TranslateAnimation(offset, one, 0, 0);
				} else if (currIndex == 2) {
					animation = new TranslateAnimation(two, one, 0, 0);
				}
				break;
			case 2:
				if (currIndex == 0) {
					animation = new TranslateAnimation(offset, two, 0, 0);
				} else if (currIndex == 1) {
					animation = new TranslateAnimation(one, two, 0, 0);
				}
				break;
			}
			currIndex = arg0;
			animation.setFillAfter(true);// True:图片停在动画结束位置
			animation.setDuration(300);
			rel.startAnimation(animation);
		}

		@Override
		public void onPageScrolled(int arg0, float arg1, int arg2) {
			
		}

		@Override
		public void onPageScrollStateChanged(int arg0) {
			
		}
	}
}

mainlayout.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/nav"
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:background="#efefef" >

        <TextView
            android:id="@+id/tab1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1.0"
            android:gravity="center"
            android:text="页片1"
            android:textColor="#000000" />

        <TextView
            android:id="@+id/tab2"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1.0"
            android:gravity="center"
            android:text="页片2"
            android:textColor="#000000" />

        <TextView
            android:id="@+id/tab3"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1.0"
            android:gravity="center"
            android:text="页片3"
            android:textColor="#000000" />
    </LinearLayout>

    <RelativeLayout
        android:id="@+id/layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <ImageView
            android:id="@+id/cursor"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </RelativeLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/page"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    </android.support.v4.view.ViewPager>

</LinearLayout>

layout1.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#565656"
android:orientation="vertical" >

    <Button
        android:id="@+id/button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="点击事件" />

</LinearLayout>

layout2.xml:
<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:orientation="vertical"  
    android:background="#abab00">  
</LinearLayout>  

layout3.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#00abcd"
    android:orientation="vertical" >

</LinearLayout>
android viewpage的使用
在使用之前要加support.v4包哦,一般在D:\android-sdk-windows\extras\android\support\v4目录下面,好像4.0以后见工程的时候自动加载的......

下面贴代码及效果图:


mainactivity类代码如下:

package com.xy.viewpager;

import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.graphics.BitmapFactory;

public class MainActivity extends Activity {
	private ViewPager mPager;// 页卡内容
	private List<View> listViews; // Tab页面列表
	private ImageView cursor;// 动画图片
	private TextView t1, t2, t3;// 页卡头标
	private int offset = 0;// 动画图片偏移量
	private int currIndex = 0;// 当前页卡编号
	private int bmpW;// 动画图片宽度
	MyPagerAdapter adapter;
	LayoutInflater mInflater;

	RelativeLayout rel;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Log.i("Viewpage", "--onCreate--");
		initImageView();
		initTextView();
		initPageView();

	}

	private void initPageView() {
		mInflater = getLayoutInflater();
		listViews = new ArrayList<View>();
		listViews.add(mInflater.inflate(R.layout.layou1, null));
		listViews.add(mInflater.inflate(R.layout.layou2, null));
		listViews.add(mInflater.inflate(R.layout.layou3, null));
		adapter = new MyPagerAdapter(listViews);
		mPager = (ViewPager) findViewById(R.id.page);
		mPager.setAdapter(adapter);
		mPager.setCurrentItem(0);
		mPager.setOnPageChangeListener(new MyOnPageChangeListener());
	}

	private void initTextView() {
		t1 = (TextView) findViewById(R.id.tab1);
		t2 = (TextView) findViewById(R.id.tab2);
		t3 = (TextView) findViewById(R.id.tab3);
		t1.setOnClickListener(new MyOnClickListener(0));
		t2.setOnClickListener(new MyOnClickListener(1));
		t3.setOnClickListener(new MyOnClickListener(2));
	}

	private void initImageView() {
		cursor = (ImageView) findViewById(R.id.cursor);
		rel = (RelativeLayout) findViewById(R.id.layout);
		

		bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.png)
				.getWidth();
		DisplayMetrics dm = new DisplayMetrics();
		getWindowManager().getDefaultDisplay().getMetrics(dm);
		int screenW = dm.widthPixels;
		offset = (screenW / 3 - bmpW) / 2;
		// Matrix matrix = new Matrix();
		// matrix.postTranslate(offset, 0);
		cursor.setBackgroundResource(R.drawable.png);
		// cursor.setScaleType(ScaleType.MATRIX);
		// cursor.setImageMatrix(matrix);
		rel.setPadding(offset, 0, 0, 0);

	}

	public class MyOnClickListener implements View.OnClickListener {
		private int index = 0;

		public MyOnClickListener(int i) {
			index = i;
		}

		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			mPager.setCurrentItem(index);
		}
	}

	public class MyPagerAdapter extends PagerAdapter implements OnClickListener {
		public List<View> mListViews;
		public View v1;
		public View v2;
		public View v3;
		public Button mButton;

		public MyPagerAdapter(List<View> mListViews) {
			this.mListViews = mListViews;
			getViewClickListener(mListViews);
		}

		public void getViewClickListener(List<View> listview) {
			v1 = listview.get(0);
			v2 = listview.get(1);
			v3 = listview.get(2);
			mButton = (Button) v1.findViewById(R.id.button);
			mButton.setOnClickListener(this);
		}

		public void destroyItem(View arg0, int arg1, Object arg2) {
			((ViewPager) arg0).removeView(mListViews.get(arg1));
		}

		public void finishUpdate(View arg0) {
		}

		@Override
		public int getCount() {
			return mListViews.size();
		}

		@Override
		public Object instantiateItem(View arg0, int arg1) {
			((ViewPager) arg0).addView(mListViews.get(arg1), 0);
			return mListViews.get(arg1);
		}

		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			return arg0 == (arg1);
		}

		@Override
		public void restoreState(Parcelable arg0, ClassLoader arg1) {
		}

		@Override
		public Parcelable saveState() {
			return null;
		}

		@Override
		public void startUpdate(View arg0) {
		}

		@Override
		public void onClick(View v) {
			AlertDialog dialog = new AlertDialog.Builder(MainActivity.this)
					.setIcon(null)
					.setTitle("dialog")
					.setMessage("nihao")
					.setPositiveButton("确定",
							new DialogInterface.OnClickListener() {

								@Override
								public void onClick(DialogInterface arg0,
										int arg1) {

									MainActivity.this.finish();

								}

								})
					.setNegativeButton("取消",
							new DialogInterface.OnClickListener() {

								@Override
								public void onClick(DialogInterface arg0,
										int arg1) {

								}

							}).create();

			// 显示对话框也可以使用showDialog(int id)方法显示对话框

			dialog.show();
		}
	}

	public class MyOnPageChangeListener implements OnPageChangeListener {

		int one = offset * 2 + bmpW;// 页卡1 -> 页卡2 偏移量
		int two = one * 2;// 页卡1 -> 页卡3 偏移量

		@Override
		public void onPageSelected(int arg0) {
			Animation animation = null;
			switch (arg0) {
			case 0:
				if (currIndex == 1) {
					animation = new TranslateAnimation(one, 0, 0, 0);
				} else if (currIndex == 2) {
					animation = new TranslateAnimation(two, 0, 0, 0);
				}
				break;
			case 1:
				if (currIndex == 0) {
					animation = new TranslateAnimation(offset, one, 0, 0);
				} else if (currIndex == 2) {
					animation = new TranslateAnimation(two, one, 0, 0);
				}
				break;
			case 2:
				if (currIndex == 0) {
					animation = new TranslateAnimation(offset, two, 0, 0);
				} else if (currIndex == 1) {
					animation = new TranslateAnimation(one, two, 0, 0);
				}
				break;
			}
			currIndex = arg0;
			animation.setFillAfter(true);// True:图片停在动画结束位置
			animation.setDuration(300);
			rel.startAnimation(animation);
		}

		@Override
		public void onPageScrolled(int arg0, float arg1, int arg2) {
			
		}

		@Override
		public void onPageScrollStateChanged(int arg0) {
			
		}
	}
}

mainlayout.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/nav"
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:background="#efefef" >

        <TextView
            android:id="@+id/tab1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1.0"
            android:gravity="center"
            android:text="页片1"
            android:textColor="#000000" />

        <TextView
            android:id="@+id/tab2"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1.0"
            android:gravity="center"
            android:text="页片2"
            android:textColor="#000000" />

        <TextView
            android:id="@+id/tab3"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1.0"
            android:gravity="center"
            android:text="页片3"
            android:textColor="#000000" />
    </LinearLayout>

    <RelativeLayout
        android:id="@+id/layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <ImageView
            android:id="@+id/cursor"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </RelativeLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/page"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    </android.support.v4.view.ViewPager>

</LinearLayout>

layout1.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#565656"
android:orientation="vertical" >

    <Button
        android:id="@+id/button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="点击事件" />

</LinearLayout>

layout2.xml:
<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:orientation="vertical"  
    android:background="#abab00">  
</LinearLayout>  

layout3.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#00abcd"
    android:orientation="vertical" >

</LinearLayout>


四个选项卡及加载数据,代码片段
四个选项卡及加载数据,代码片段


package com.cy.contact.activity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Stack;

import org.json.JSONObject;
import org.json.JSONStringer;
import org.json.JSONTokener;

import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.Matrix;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.text.Editable;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.TextWatcher;
import android.text.style.ForegroundColorSpan;
import android.util.DisplayMetrics;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnClickListener;
import android.view.View.OnCreateContextMenuListener;
import android.view.View.OnTouchListener;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;

import com.cy.contact.activity.tool.DialAdapter;
import com.cy.contact.dao.NativeCallDao;
import com.cy.contact.dao.UserDao;
import com.cy.contact.pojo.NativeUser;
import com.cy.contact.pojo.User;
import com.cy.contact.pojo.UserContent;
import com.cy.contact.usercontent.action.ActionCode;
import com.cy.contact.util.SpellUtils;
import com.j256.ormlite.dao.ForeignCollection;


/**
 * 警务通讯录   拨号界面
 * @author yutao
 *
 */
public class DialActivity extends ToolBarActivity implements OnClickListener{
	//数字功能键
	private RelativeLayout dialLayout;
	private Button num0Btn,num1Btn,num2Btn,
	num3Btn,num4Btn,num5Btn,num6Btn,
	num7Btn,num8Btn,num9Btn,numStarBtn,
	numPoundBtn,allRecordBtn,noCallBtn;
	private Button delNumBtn;
	private TextView inputBtn;
	//private ListView callLogListView;
	private ListView dialAllList;
	private ListView dialAlreadyList;
	private ListView dialOutList;
	private ListView dialMissList;
	
	private DialAdapter dialAllAdapter;
	private DialAdapter dialAlreadyAdapter; 
	private DialAdapter dialMissAdapter; 
	private DialAdapter dialOutAdapter; 
	private ListView contactListView;       //显示搜索联系人
	
	private int currentPosition=-1;         //记录通话记录点击的位置
	private int searchCurrentPosition=-1;   //记录T9键盘搜索联系人点击位置
	private SearchContactAdapter searchAdapter;			//显示联系人适配器
	//private CallLogAdapter callLogAdapter;      //通话记录数据适配器
	private List<NativeUser> allRecordslist = new ArrayList<NativeUser>();	
	private List<NativeUser> missCallsList=new ArrayList<NativeUser>();
	private List<NativeUser> outCallsList=new ArrayList<NativeUser>();
	
	private List<NativeUser> listRecords=new ArrayList<NativeUser>();
	Stack<String> myStack=new Stack<String>();
	private static final String DAILNUMBER="dail";
	
	private String keyWord=null;           //当前搜索关键字
	private NativeCallDao nadao =null;
	private UserDao udao=null;
	
	private int  callStatusFlag=0;      //为true时表示显示全部通话记录状态,false时显示未接电话
	private int DIALDETAIL = 1;    //通话记录返回状态
	private int delType  = 0;    //设置需要删除通话记录的类别
	
	private RelativeLayout searchLayout;      //搜索界面布局                  默认为invisiable
	private LinearLayout searchBtnlayout;     //搜索界面下按钮布局
	private Button newContactBtn,saveToHaveBtn,sendMsgBtn;   //新建联系人,  保存到已有,发送短信
	private List<User> searchListUser=new ArrayList<User>();  //搜索联系人数据
	
	//viewPager用到变量
    private RelativeLayout dialPage;//viewpager和选项卡  的界面
    private RelativeLayout dialImageLay;
	private ViewPager mPager;// ViewPager内容
	private List<View> listViews; // Tab页面列表
	private ImageView cursor;// 动画图片
	private TextView t1, t2, t3,t4;// 页卡头标
	private int offset = 0;// 动画图片偏移量
	private int currIndex = 0;// 当前页卡编号
	private int bmpW;// 动画图片宽度
	DialPagerAdapter adapter;
	LayoutInflater mInflater;

	
	
	private Handler handler =new Handler(){

		@Override
		public void handleMessage(Message msg) {
			switch(msg.what){
			case 1:
				initData();
				break;
			case 2:
				initData();
				break;
			case 3:
				initData();
				break;
			
			}
		}
	};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.dial_layout);
		
		nadao = NativeCallDao.getInstance(this);
		udao=UserDao.getInstance(this);
		
		initView();
		initData();
		//registerCllBroadCast();
		
		 initImageView();
		 initTextView();
		 initPageView();
	}
	
	
	
	 private void initPageView() {
			mInflater = getLayoutInflater();
			listViews = new ArrayList<View>();
			listViews.add(mInflater.inflate(R.layout.dial_all_layout, null));
			listViews.add(mInflater.inflate(R.layout.dial_miss_layout, null));
			listViews.add(mInflater.inflate(R.layout.dial_out_layout, null));
			listViews.add(mInflater.inflate(R.layout.dial_already_layout, null));
			
			
			adapter = new DialPagerAdapter(listViews);
			mPager = (ViewPager) findViewById(R.id.page); 
			mPager.setAdapter(adapter);
			mPager.setCurrentItem(0);
			mPager.setOnPageChangeListener(new DialOnPageChangeListener());
		}

		private void initTextView() {
			t1 = (TextView) findViewById(R.id.tab1);
			t2 = (TextView) findViewById(R.id.tab2);
			t3 = (TextView) findViewById(R.id.tab3);
			t4 = (TextView) findViewById(R.id.tab4);
			t1.setOnClickListener(new MyOnClickListener(0));
			t2.setOnClickListener(new MyOnClickListener(1));
			t3.setOnClickListener(new MyOnClickListener(2));
			t4.setOnClickListener(new MyOnClickListener(3));
		}

		
		private void initImageView() {
			cursor = (ImageView) findViewById(R.id.cursor);
			dialImageLay = (RelativeLayout) findViewById(R.id.dialImageLay);

			bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.ok)
					.getWidth();
			DisplayMetrics dm = new DisplayMetrics();
			getWindowManager().getDefaultDisplay().getMetrics(dm);
			int screenW = dm.widthPixels;
			offset = (screenW / 4 - bmpW) / 2;
			cursor.setBackgroundResource(R.drawable.ok);
			dialImageLay.setPadding(offset, 0, 0, 0);

		}
	
	
		public class MyOnClickListener implements View.OnClickListener {
			private int index = 0;

			public MyOnClickListener(int i) {
				index = i;
			}

			
			public void onClick(View v) {
				// TODO Auto-generated method stub
				mPager.setCurrentItem(index);
			}
		}

	
	/**
	 * 刷新数据
	 */
	/*public void initData(){
		handler.postDelayed(new Runnable(){
			public void run() {
				
				allRecordslist=app.dbService.getListCall();
				missCallsList=app.dbService.getMissCallsList();
				
			}
			
		}, 100);
	}*/
		public void initData(){
			new Runnable(){
				public void run() {
					allRecordslist.clear();
					missCallsList.clear();
					outCallsList.clear();
					List<NativeUser> la = app.dbService.getListCall();
					List<NativeUser> lm = app.dbService.getMissCallsList();
					List<NativeUser> lo = app.dbService.getOutCallsList();
					allRecordslist.addAll(la);
					missCallsList.addAll(lm);
					outCallsList.addAll(lo);
					System.out.println("outCallsList  "+outCallsList.size());
					System.out.println("lo  "+lo.size());
					
				}
				
			}.run();
		}
	
	
	
	

	public void registerCllBroadCast(){
		IntentFilter callFilter = new IntentFilter();
		callFilter.addAction(app.UPDATE_CALL);
		registerReceiver(callBrodcastResever, callFilter);
	}
	
	private BroadcastReceiver callBrodcastResever = new BroadcastReceiver() {
		
		@Override
		public void onReceive(Context context, Intent intent) {
			String action = intent.getAction();
			if(action == app.UPDATE_CALL){
				app.dbService.initOrRefreshCallRecord();
				app.dbService.initOrRefreshMissCall();
				app.dbService.initOrRefreshOutCall();
				initData();
			}
			
		}
	};
	
	/**
	 * 显示拨号键盘
	 */
	public void showDialLayout(){
		if(dialLayout.getVisibility()==View.VISIBLE){
			dialLayout.setVisibility(View.INVISIBLE);
		}else{
			dialLayout.setVisibility(View.VISIBLE);
		}
	}
	
	
	/**
	 * 通话记录数据适配器
	 * @author yutao
	 *
	 */
	/*class CallLogAdapter extends BaseAdapter{
		private Context context;
		public CallLogAdapter(Context context){
			this.context = context;
		}
		public int getCount() {
			return listRecords.size();
		}
		public Object getItem(int position) {
			return listRecords.get(position);
		}
		public long getItemId(int position) {
			return position;
		}
		
		class ItemView{
			public  ImageView seeImageView;
			public ImageView callImageView;
			public TextView  numberText; 
			public TextView  nameText;
			public TextView timesText;
			public TextView dateText;
			public LinearLayout callPhone;
			public LinearLayout message;
			public LinearLayout dailMail;
			public LinearLayout callrecord;
			public LinearLayout callLogHide;

		}
		
		HashMap<Integer,View> lamp =new  HashMap<Integer,View>();
		public View getView(int position, View convertView, ViewGroup parent) {
			View view;
			ItemView itemView = null;
			if(lamp.get(position) == null){
				convertView  = LayoutInflater.from(context).inflate(R.layout.list_calllog, null);
				itemView = new ItemView();
				itemView.seeImageView = (ImageView)convertView.findViewById(R.id.incallLogImage);
				itemView.callImageView = (ImageView)convertView.findViewById(R.id.shortcut_phone);
				itemView.numberText = (TextView)convertView.findViewById(R.id.callLognumber);
				itemView.nameText = (TextView)convertView.findViewById(R.id.callLogName);
				itemView.timesText = (TextView)convertView.findViewById(R.id.callLogTimes);
				itemView.dateText = (TextView)convertView.findViewById(R.id.callLogdate);
				itemView.callPhone = (LinearLayout)convertView.findViewById(R.id.callPhonelayout);
				itemView.message = (LinearLayout)convertView.findViewById(R.id.smsMessage);
				itemView.dailMail = (LinearLayout)convertView.findViewById(R.id.dail_email);
				itemView.callrecord  = (LinearLayout)convertView.findViewById(R.id.callrecord);
				itemView.callLogHide=(LinearLayout)convertView.findViewById(R.id.callLogHide);
				convertView.setTag(itemView);
				
			}else{
				view = lamp.get(position);
				itemView = (ItemView)view.getTag();
			}
			  final NativeUser user = listRecords.get(position);
			  if(user.getType()==3){
				  if(user.getUserName() ==null){
					  itemView.nameText.setTextColor(getResources().getColor(R.color.miss_dial_color));
					  itemView.nameText.setText("未知");
				  }else{
					  itemView.nameText.setText(user.getUserName());
					  itemView.nameText.setTextColor(getResources().getColor(R.color.miss_dial_color));
				  }
					itemView.numberText.setText(user.getPhoneNumber());
					itemView.dateText.setText(user.getCtreatTime());
					itemView.timesText.setText("("+user.getCount()+")");
					 itemView.numberText.setTextColor(getResources().getColor(R.color.miss_dial_color));
					 itemView.dateText.setTextColor(getResources().getColor(R.color.miss_dial_color));
					 itemView.timesText.setTextColor(getResources().getColor(R.color.miss_dial_color));
					 
			  }else{
				  if(user.getUserName() ==null){
					  itemView.nameText.setText("未知");
				  }else{
					  itemView.nameText.setText(user.getUserName());
				  }
					itemView.numberText.setText(user.getPhoneNumber());
					itemView.dateText.setText(user.getCtreatTime());
					itemView.timesText.setText("("+user.getCount()+")");
			   }
				 
			
			if(currentPosition==-1){
				itemView.callLogHide.setVisibility(View.GONE);
				itemView.callImageView.setVisibility(View.VISIBLE);
			}else if(position==currentPosition){
				itemView.callLogHide.setVisibility(View.VISIBLE);
				itemView.callImageView.setVisibility(View.GONE);
			}else{
				itemView.callLogHide.setVisibility(View.GONE);
				itemView.callImageView.setVisibility(View.VISIBLE);
			}
			
			//image 打电话事件
			itemView.callImageView.setOnClickListener(new OnClickListener() {
				public void onClick(View v) {
					String number = user.getPhoneNumber();
					if(! number.equals("")){
						try{
							Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+number));
							startActivity(intent);
						}catch(Exception e){
							e.printStackTrace();
						}
						
					}
				}
			});
			
			//layout 打电话事件
			itemView.callPhone.setOnClickListener(new OnClickListener() {
				public void onClick(View v) {
					String number = user.getPhoneNumber();
					if(! number.equals("")){
						try{
							Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+number));
							startActivity(intent);
						}catch(Exception e){
							e.printStackTrace();
						}
						
					}
				}
			});
			//发送短信事件
			itemView.message.setOnClickListener(new OnClickListener() {
				String number = user.getPhoneNumber();
				public void onClick(View v) {
					Intent intent = new Intent(DialActivity.this,SmsDetialActivity.class);
					intent.putExtra("number", number);
					intent.putExtra("DAILNUMBER", DAILNUMBER);
					startActivity(intent);
				}
			});
			
			//通话记录详情
			itemView.callrecord.setOnClickListener(new OnClickListener() {
				String number = user.getPhoneNumber();
				public void onClick(View v) {
					 Intent intent = new Intent();
					 intent.putExtra("number", number);
					 intent.putExtra("name", user.getUserName());
					 intent.setClass(DialActivity.this, DialRecordListAcitvity.class);
					 startActivityForResult(intent, DIALDETAIL);
				}
				
			});
			return convertView;
		}
		
		
		
	}*/
	
	public void initView(){
		dialLayout=(RelativeLayout)findViewById(R.id.dialLayout);
		
		num0Btn=(Button)findViewById(R.id.num0Btn);
		num0Btn.setOnClickListener(this);
		
		num1Btn=(Button)findViewById(R.id.num1Btn);
		num1Btn.setOnClickListener(this);
		
		num2Btn=(Button)findViewById(R.id.num2Btn);
		num2Btn.setOnClickListener(this);
		
		num3Btn=(Button)findViewById(R.id.num3Btn);
		num3Btn.setOnClickListener(this);
		
		num4Btn=(Button)findViewById(R.id.num4Btn);
		num4Btn.setOnClickListener(this);
		
		num5Btn=(Button)findViewById(R.id.num5Btn);
		num5Btn.setOnClickListener(this);
		
		num6Btn=(Button)findViewById(R.id.num6Btn);
		num6Btn.setOnClickListener(this);
		
		num7Btn=(Button)findViewById(R.id.num7Btn);
		num7Btn.setOnClickListener(this);
		
		num8Btn=(Button)findViewById(R.id.num8Btn);
		num8Btn.setOnClickListener(this);
		
		num9Btn=(Button)findViewById(R.id.num9Btn);
		num9Btn.setOnClickListener(this);
		
		numStarBtn=(Button)findViewById(R.id.numStarBtn);
		numStarBtn.setOnClickListener(this);
		
		numPoundBtn=(Button)findViewById(R.id.numPoundBtn);
		numPoundBtn.setOnClickListener(this);
		
		inputBtn=(TextView)findViewById(R.id.inputBtn);
		inputBtn.setOnClickListener(this);
		inputBtn.addTextChangedListener(new TextWatcher(){

			public void afterTextChanged(Editable s) {
				
			}

			public void beforeTextChanged(CharSequence s, int start, int count,
					int after) {
				
			}

			public void onTextChanged(CharSequence s, int start, int before,
					int count) {
				
				keyWord=s.toString();
				if(keyWord.equals("")){   //拨号盘没有内容时,隐藏联系人ListView
					searchLayout.setVisibility(View.INVISIBLE);
					main.hideDialLayout();
				}else{
					
					callStatusFlag=3;
					handler.postDelayed(new Runnable(){
						public void run() {
							searchByKeyword(keyWord);
						}
					},10);
					main.showDialLayout();
					if(searchLayout.getVisibility()==View.INVISIBLE){
						searchLayout.setVisibility(View.VISIBLE);
					}
				}
				
			}
			
		});
		
		delNumBtn=(Button)findViewById(R.id.delNumBtn);
		delNumBtn.setOnClickListener(this);
		allRecordBtn=(Button)findViewById(R.id.dial_allrecord_btn);
		allRecordBtn.setOnClickListener(new MyOnClickListener(0));
		noCallBtn = (Button)findViewById(R.id.dial_norecord_btn);
		noCallBtn.setOnClickListener(new MyOnClickListener(1));
		dialPage = (RelativeLayout)findViewById(R.id.dialPage);
		
	   //通话记录listView
     /*  callLogListView = (ListView)findViewById(R.id.phoneRecordView);//
       callLogAdapter = new CallLogAdapter(this);
	   callLogListView.setAdapter(callLogAdapter);
		*/
		//点击隐藏键盘
	   dialPage.setOnTouchListener(new OnTouchListener() {
			public boolean onTouch(View v, MotionEvent event) {
				if(dialLayout.isShown()){
					dialLayout.setVisibility(View.INVISIBLE);
				}
				return false;
			}
		});
		
		/*//单击按钮用来隐藏listViewITem 项
		callLogListView.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				
				if( position != currentPosition ){
					currentPosition = position;
				}else{
					currentPosition = -1;
				}
				callLogAdapter.notifyDataSetChanged();
			}
		});
	      //长按
		callLogListView.setOnItemLongClickListener(new OnItemLongClickListener() {
			public boolean onItemLongClick(AdapterView<?> parent, View view,
					int position, long id) {
				return false;
			}
		});
		*/
		
		
		
	   searchLayout=(RelativeLayout) findViewById(R.id.searchLayout);//搜索联系人
	   searchBtnlayout=(LinearLayout) findViewById(R.id.searchBtnlayout);
	   
	   newContactBtn=(Button) findViewById(R.id.newContachBtn);
	   newContactBtn.setOnClickListener(this);
	   saveToHaveBtn=(Button) findViewById(R.id.saveToHaveBtn);
	   saveToHaveBtn.setOnClickListener(this);
	   sendMsgBtn=(Button) findViewById(R.id.sendMsgBtn);
	   sendMsgBtn.setOnClickListener(this);
		
	   //搜索显示联系人
	   contactListView=(ListView)findViewById(R.id.contactListView);
	   searchAdapter=new SearchContactAdapter(this);
	   contactListView.setAdapter(searchAdapter);
	   
	   contactListView.setOnTouchListener(new OnTouchListener() {
			public boolean onTouch(View v, MotionEvent event) {
				if(dialLayout.isShown()){
					dialLayout.setVisibility(View.INVISIBLE);
				}
				return false;
			}
		});
	   
	   //取得搜索Position
	   contactListView.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				
				if(position != searchCurrentPosition){
					searchCurrentPosition = position;
				}else{
					searchCurrentPosition = -1;
				}
				searchAdapter.notifyDataSetChanged();
			}
		});
	   
	   
	}
	
	
	@Override
	public boolean onContextItemSelected(MenuItem item) {
		AdapterView.AdapterContextMenuInfo menuInfo;
		menuInfo = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
		int position = menuInfo.position;
		System.out.println("delType  :"+delType);
		if(delType ==1){
			final NativeUser user = allRecordslist.get(position);
			
			switch(item.getItemId()){
			case 0:     //删除通话记录
				
				handler.post(new Runnable(){
					public void run(){
						allRecordslist.clear();
						nadao.delCallRecord(user.getPhoneNumber());
						app.dbService.initOrRefreshCallRecord();
						app.dbService.initOrRefreshMissCall();
						app.dbService.initOrRefreshOutCall();
						initData();
						
						//allRecordslist=app.dbService.getListCall();
						dialAllAdapter.notifyDataSetChanged();
						adapter.notifyDataSetChanged();
						
					}
				});
				
				
				break;
			case 1:
				final EditText ed = new EditText(this);
				ed.setText(user.getPhoneNumber());
				new AlertDialog.Builder(this).setTitle("编辑号码")
				.setView(ed).setPositiveButton("呼叫", new DialogInterface.OnClickListener() {
					
					public void onClick(DialogInterface dialog, int which) {
						String number = ed.getText().toString();
						if(! number.equals("")){
							Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+number));
							startActivity(intent);
						}
					}
				})
				.setNegativeButton("取消", null).show();
				break;
			}
			
		}else if(delType == 2){
			final NativeUser user = missCallsList.get(position);
						
						switch(item.getItemId()){
						case 0:     //删除通话记录
							
							handler.post(new Runnable(){
								public void run(){
									missCallsList.clear();
									nadao.delCallRecord(user.getPhoneNumber());
									app.dbService.initOrRefreshCallRecord();
									app.dbService.initOrRefreshMissCall();
									app.dbService.initOrRefreshOutCall();
									initData();
									
									//missCallsList=app.dbService.getMissCallsList();
									dialMissAdapter.notifyDataSetChanged();
									adapter.notifyDataSetChanged();
									
									
								}
							});
							
							
							break;
						case 1:
							final EditText ed = new EditText(this);
							ed.setText(user.getPhoneNumber());
							new AlertDialog.Builder(this).setTitle("编辑号码")
							.setView(ed).setPositiveButton("呼叫", new DialogInterface.OnClickListener() {
								
								public void onClick(DialogInterface dialog, int which) {
									String number = ed.getText().toString();
									if(! number.equals("")){
										Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+number));
										startActivity(intent);
									}
								}
							})
							.setNegativeButton("取消", null).show();
							break;
						}
		}else if(delType == 3){
			
				final NativeUser user = outCallsList.get(position);
				
				switch(item.getItemId()){
				case 0:     //删除通话记录
					
					handler.post(new Runnable(){
						public void run(){
							outCallsList.clear();
							nadao.delCallRecord(user.getPhoneNumber());
							app.dbService.initOrRefreshCallRecord();
							app.dbService.initOrRefreshMissCall();
							app.dbService.initOrRefreshOutCall();
							initData();
							
							//missCallsList=app.dbService.getMissCallsList();
							dialOutAdapter.notifyDataSetChanged();
							adapter.notifyDataSetChanged();
						
							
						}
					});
					
					
					break;
				case 1:
					final EditText ed = new EditText(this);
					ed.setText(user.getPhoneNumber());
					new AlertDialog.Builder(this).setTitle("编辑号码")
					.setView(ed).setPositiveButton("呼叫", new DialogInterface.OnClickListener() {
						
						public void onClick(DialogInterface dialog, int which) {
							String number = ed.getText().toString();
							if(! number.equals("")){
								Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+number));
								startActivity(intent);
							}
						}
					})
					.setNegativeButton("取消", null).show();
					break;
				}
			
		}
		
		
		return super.onContextItemSelected(item);
	}
	
	
	
	
	/**
	 * 根据关键字搜索
	 * @param keyWord
	 */
	public void searchByKeyword(String keyWord){
		if(keyWord!=null){
			
			if(!keyWord.equals("")){
				if(searchLayout.getVisibility()==View.INVISIBLE||searchLayout.getVisibility()==View.GONE){
					dialPage.setVisibility(View.INVISIBLE);
					
					searchLayout.setVisibility(View.VISIBLE);
				}
				
				searchListUser.clear();
				searchListUser=udao.getListUserByT9Num(keyWord);
				if(searchListUser.size()==0){
					searchBtnlayout.setVisibility(View.VISIBLE);
				}else{
					searchBtnlayout.setVisibility(View.GONE);
					searchAdapter.notifyDataSetChanged();
				}
				
			}else{
				searchLayout.setVisibility(View.INVISIBLE);
				if(dialPage.getVisibility()==View.INVISIBLE){
					dialPage.setVisibility(View.VISIBLE);
					searchLayout.setVisibility(View.INVISIBLE);
				}
			}
			
			
		}
		
	}
	
	
	

	

	public void onClick(View v) {
		
		switch(v.getId()){
		
		case R.id.num0Btn:
			myStack.add("0");
			break;
		case R.id.num1Btn:
			myStack.add("1");
			break;
		case R.id.num2Btn:
			myStack.add("2");
			break;
		case R.id.num3Btn:
			myStack.add("3");
			break;
		case R.id.num4Btn:
			myStack.add("4");
			break;
		case R.id.num5Btn:
			myStack.add("5");
			break;
		case R.id.num6Btn:
			myStack.add("6");
			break;
		case R.id.num7Btn:
			myStack.add("7");
			break;
		case R.id.num8Btn:
			myStack.add("8");
			break;
		case R.id.num9Btn:
			myStack.add("9");
			break;
		case R.id.numStarBtn:
			myStack.add("*");
			break;
		case R.id.numPoundBtn:
			myStack.add("#");
			break;
		case R.id.delNumBtn:
			if(!myStack.isEmpty()){
				myStack.pop();
			}
			break;
		case R.id.inputBtn:
			 String phoneNumber=getStackText();
			 if(!phoneNumber.equals("")){
				 try{
					 Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+phoneNumber));
					 startActivity(intent);
				 }catch(Exception e){
					 e.printStackTrace();
				 }
			 }
			break;
		/*case R.id.dial_allrecord_btn:  //全部电话记录
			
			if(searchLayout.getVisibility()==View.VISIBLE){
				searchLayout.setVisibility(View.INVISIBLE);
			}
			if(callLogListView.getVisibility()==View.INVISIBLE){
				callLogListView.setVisibility(View.VISIBLE);
			}
			if(callStatusFlag==0){
				return;
			}
			callStatusFlag=0;
			listRecords.clear();
			listRecords.addAll(allRecordslist);
			callLogAdapter.notifyDataSetChanged();
			break;	
			
		case R.id.dial_norecord_btn:     //未接电话
			
			if(searchLayout.getVisibility()==View.VISIBLE){
				searchLayout.setVisibility(View.INVISIBLE);
			}
			if(callLogListView.getVisibility()==View.INVISIBLE){
				callLogListView.setVisibility(View.VISIBLE);
			}
			
			if(callStatusFlag==1){
				return;
			}
			callStatusFlag=1;
			listRecords.clear();
			listRecords.addAll(missCallsList);
			callLogAdapter.notifyDataSetChanged();
			break;*/
		case R.id.newContachBtn:   //新建联系人
			User u=new User();
			UserContent content=new UserContent();
			content.setContentCategory(ActionCode.PHONE_ACTION);
			content.setContentText(getStackText());
			u.getListContent().add(content);
			app.setEditUser(u);
			startActivity(new Intent(DialActivity.this,EditContactActivity.class).putExtra("create",1));
			break;
		case R.id.saveToHaveBtn:   //保存到已有
			startActivity(new Intent(DialActivity.this,SelectContactsActivity.class).putExtra("actionCode",1).putExtra("data", getStackText()));
			break;
		case R.id.sendMsgBtn:      //发送短信
			Intent intentsms = new Intent(Intent.ACTION_VIEW);  
			intentsms.putExtra("sms_body",""); 
			intentsms.putExtra("address",getStackText()); 
			intentsms.setType("vnd.android-dir/mms-sms");
			startActivity(intentsms);
			break;
		default:
			break;
		}
		setInputBtnText();
	}


	public void setInputBtnText(){
		String s=getStackText();
		inputBtn.setText(s);
	}
	
	/**
	 * 获取栈内容
	 * @return
	 */
	public String getStackText(){
		Iterator iter=myStack.iterator();
		StringBuffer sb=new StringBuffer();
		while(iter.hasNext()){
			String s=(String) iter.next();
			sb.append(s);
		}
		return sb.toString();
	}
	
	
	class SearchContactAdapter extends BaseAdapter{
		
		private Context context;
		
		public SearchContactAdapter(Context context){
			this.context=context;
		}
		
		public int getCount() {
			
			return searchListUser.size();
		}

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

		public long getItemId(int position) {
			
			return position;
		}
		
		class ItemView{
			public TextView nameTextView;     //姓名
			public TextView pinyinTextView;   //拼音
			public TextView numTextView;      //电话号码
			public TextView whereTextView;    //归属地
			public ImageView shortCutPhone;    //打电话
			public LinearLayout hideLayout;   //隐藏视图
			
			public LinearLayout callBtn;
			public LinearLayout msgBtn;
			public LinearLayout emailBtn;
			public LinearLayout detailBtn;

		}
		public View getView(int position, View convertView, ViewGroup parent) {
			
			ItemView itemView = null;
			 
			if(convertView == null){
				convertView  = LayoutInflater.from(context).inflate(R.layout.dial_search_item, null);
				itemView = new ItemView();
				
				
				itemView.nameTextView = (TextView)convertView.findViewById(R.id.nameTextView);
				itemView.pinyinTextView = (TextView)convertView.findViewById(R.id.pinyinTextView);
				itemView.numTextView = (TextView)convertView.findViewById(R.id.numTextView);
				itemView.whereTextView = (TextView)convertView.findViewById(R.id.whereTextView);
				
				itemView.shortCutPhone = (ImageView)convertView.findViewById(R.id.shortcutPhone);
				itemView.hideLayout=(LinearLayout)convertView.findViewById(R.id.hideLayout);
				
				itemView.callBtn=(LinearLayout)convertView.findViewById(R.id.callBtn);
				itemView.msgBtn=(LinearLayout)convertView.findViewById(R.id.msgBtn);
				itemView.emailBtn=(LinearLayout)convertView.findViewById(R.id.emailBtn);
				itemView.detailBtn=(LinearLayout)convertView.findViewById(R.id.detailBtn);
				
				
				convertView.setTag(itemView);
				
			}else{
				itemView = (ItemView)convertView.getTag();
			}
			
			final User u=searchListUser.get(position);
			
			setNameHightLight(itemView.nameTextView,u.getMemberName(),u.getMemberNameNum());
			//setPinyinHightLight(itemView.pinyinTextView,u.getMemberName(),u.getMemberNameNum());
			setPhoneNumHightLight(itemView.numTextView,keyWord,u);
			
			final String phoneNum=itemView.numTextView.getText().toString();
			//image 打电话事件
			itemView.shortCutPhone.setOnClickListener(new OnClickListener() {
				public void onClick(View v) {
					String number = phoneNum;
					if(! number.equals("")){
						try{
							Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+number));
							startActivity(intent);
						}catch(Exception e){
							e.printStackTrace();
						}
						
					}
				}
			});
			
			//隐藏菜单   打电话按钮
			itemView.callBtn.setOnClickListener(new OnClickListener() {
				public void onClick(View v) {
					String number = phoneNum;
					if(! number.equals("")){
						try{
							Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+number));
							startActivity(intent);
						}catch(Exception e){
							e.printStackTrace();
						}
						
					}
				}
			});
			
			itemView.msgBtn.setOnClickListener(new OnClickListener() {
				public void onClick(View v) {
					Intent intent = new Intent(DialActivity.this,SmsDetialActivity.class);
					intent.putExtra("number", phoneNum);
					intent.putExtra("DAILNUMBER", DAILNUMBER);
					startActivity(intent);
				}
			});
			
			itemView.emailBtn.setOnClickListener(new OnClickListener() {
				public void onClick(View v) {
					
				}
			});
			
			itemView.detailBtn.setOnClickListener(new OnClickListener() {
				public void onClick(View v) {
					app.setEditUser(u);
					startActivity(new Intent(DialActivity.this,EditContactActivity.class).putExtra("create",3));
				}
			});
			
			if(searchCurrentPosition==-1){
				itemView.hideLayout.setVisibility(View.GONE);
			}else if(position==searchCurrentPosition){
				itemView.hideLayout.setVisibility(View.VISIBLE);
			}else{
				itemView.hideLayout.setVisibility(View.GONE);
			}
			
			return convertView;
		}
		
	}
	
	
	
	
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if(requestCode == DIALDETAIL){
			int result = data.getIntExtra("dialBack", 0);
			if(result == 1){
				app.dbService.initOrRefreshCallRecord();
				app.dbService.initOrRefreshMissCall();
				app.dbService.initOrRefreshOutCall();
				Message msg = new Message();
				msg.what = 3;
				handler.sendMessage(msg);
				
			}
		}
		super.onActivityResult(requestCode, resultCode, data);
	}

	/**
	 * 设置姓名高亮
	 * @param tv
	 * @param text
	 */
	protected void setNameHightLight(TextView tv,String text,String json){
		
		SpannableStringBuilder style= new  SpannableStringBuilder(text); 
		try{
			JSONObject o=new JSONObject(json);
			String [] arr2=text.split("");
			for(int j=0;j<arr2.length;j++){
				String ss=arr2[j];
				if(!ss.equals("")){
					if(!o.isNull((j-1)+"")){
						String value=o.getString((j-1)+"");
						if(value.charAt(0)=='1'){
							style.setSpan( new  ForegroundColorSpan(Color.BLUE),j-1,j,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
						}
					}
				}
			}
			
		}catch(Exception e){
			e.printStackTrace();
		}
		tv.setText(style); 
	}
	
	
	/**
	 * 设置搜索拼音文字高亮
	 * @param tv   
	 * @param text    //文字内容
	 */
	protected void setPinyinHightLight(TextView tv,String text,String json){
		
		String letter=SpellUtils.getFull(text);   //获取姓名的全称的拼音
		SpannableStringBuilder style= new  SpannableStringBuilder(letter); 
		
		try{
			JSONObject o=new JSONObject(json);
			String [] arr2=text.split("");
			int length2=arr2.length;
			int index=0;
			int move=0;
			for(int j=0;j<length2;j++){
				String ss=arr2[j];
				if(j>0){
					move=move+SpellUtils.getFull(arr2[j-1]).length();
				    index=move;
				}
				if(!ss.equals("")){
					if(!o.isNull((j-1)+"")){
						String value=o.getString((j-1)+"");
						if(value.charAt(0)=='0'){
							continue;
						}
						for(char c:value.toCharArray()){
							if(c=='1'){
								style.setSpan( new  ForegroundColorSpan(Color.BLUE),index,index+1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
							}
							index++;
						}
						
					}
				}
			}
			
		}catch(Exception e){
			e.printStackTrace();
		}
		tv.setText(style); 
		
	}
	
	/**
	 * 设置电话号码高亮
	 * @param tv
	 * @param keyWord
	 * @param u
	 */
	public void setPhoneNumHightLight(TextView tv,String keyWord,User u){
		ForeignCollection<UserContent>  contents=u.getContents();
		if(contents!=null){
			for(UserContent content:contents){
				if(ActionCode.PHONE_ACTION.equals(content.getContentCategory())){
					String num=content.getContentText();
					if(num!=null){
						if(keyWord.length()>=2){
							int start=num.indexOf(keyWord);
							if(start!=-1){
								int length=keyWord.length();
								SpannableStringBuilder style= new  SpannableStringBuilder(num);
								style.setSpan( new  ForegroundColorSpan(Color.BLUE),start,start+length,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
								tv.setText(style);
								break;
							}else{
								tv.setText(num);
							}
						}else{
							tv.setText(num);
							break;
						}
						
						 
					}
				}
			}
		}
		
	}
	

	public class DialPagerAdapter extends PagerAdapter implements OnClickListener {
		public List<View> mListViews;
		public View v1;
		public View v2;
		public View v3;
		public View v4;
		
		public DialPagerAdapter(List<View> mListViews) {
			this.mListViews = mListViews;
			getViewClickListener(mListViews);
		}

		public void getViewClickListener(List<View> listview) {
			
			
			v1 = listview.get(0);
			v2 = listview.get(1);
			v3 = listview.get(2);
			v4 = listview.get(3);
			
			//所有
			dialAllList = (ListView)v1.findViewById(R.id.dial_all_list);
			dialAllList.setOnItemClickListener(new OnItemClickListener() {
				public void onItemClick(AdapterView<?> arg0, View arg1,
						int position, long arg3) {
					onClickItem(position,dialAllAdapter);
				}
				
			});
			dialAllList.setOnItemLongClickListener(new OnItemLongClickListener() {
				public boolean onItemLongClick(AdapterView<?> parent, View view,
						int position, long id) {
					delType = 1;
					return false;
				}
			});
			
			dialAllList.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
				public void onCreateContextMenu(ContextMenu menu, View v,
						ContextMenuInfo menuInfo) {
					
					OnItemLongClick(allRecordslist,menuInfo, menu);
				}
			});
			//未接
			dialMissList = (ListView)v2.findViewById(R.id.dial_miss_list);
			dialMissList.setOnItemClickListener(new OnItemClickListener() {
				public void onItemClick(AdapterView<?> parent, View view,
						int position, long id) {
					onClickItem(position,dialMissAdapter);
					
				}
			});
			dialMissList.setOnItemLongClickListener(new OnItemLongClickListener() {
				public boolean onItemLongClick(AdapterView<?> parent,
						View view, int position, long id) {
					delType = 2;
					return false;
				}
			});
			dialMissList.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
				public void onCreateContextMenu(ContextMenu menu, View v,
						ContextMenuInfo menuInfo) {
					OnItemLongClick(missCallsList,menuInfo, menu);
					
				}
			});
			//已拨打
			
			dialOutList = (ListView)v3.findViewById(R.id.dial_out_list);
			dialOutList.setOnItemClickListener(new OnItemClickListener() {
				public void onItemClick(AdapterView<?> parent, View view,
						int position, long id) {
					onClickItem(position,dialOutAdapter);
					
				}
			});
			dialOutList.setOnItemLongClickListener(new OnItemLongClickListener() {
				public boolean onItemLongClick(AdapterView<?> parent,
						View view, int position, long id) {
					delType = 3;
					return false;
				}
			});
			dialOutList.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
				public void onCreateContextMenu(ContextMenu menu, View v,
						ContextMenuInfo menuInfo) {
					OnItemLongClick(outCallsList,menuInfo, menu);
					
				}
			});
			
		}

		public void destroyItem(View arg0, int arg1, Object arg2) {
			((ViewPager) arg0).removeView(mListViews.get(arg1));
		}

		public void finishUpdate(View arg0) {
		}

		@Override
		public int getCount() {
			return mListViews.size();
		}

		@Override
		public Object instantiateItem(View arg0, int arg1) {
			((ViewPager) arg0).addView(mListViews.get(arg1), 0);
			
			if(arg1==0){
				
				System.out.println("allRecordslist  :"+allRecordslist.size());
				dialAllAdapter = new DialAdapter(DialActivity.this,allRecordslist);
				dialAllList.setAdapter(dialAllAdapter);
			}else if(arg1 == 1){
				
				dialMissAdapter = new DialAdapter(DialActivity.this,missCallsList);
				 dialMissList.setAdapter(dialMissAdapter);
				
			}else if(arg1 == 3){
				
				dialOutAdapter = new DialAdapter(DialActivity.this,outCallsList);
				dialOutList.setAdapter(dialOutAdapter);
			}
			
			return mListViews.get(arg1);
		}

		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			return arg0 == (arg1);
		}

		@Override
		public void restoreState(Parcelable arg0, ClassLoader arg1) {
		}

		@Override
		public Parcelable saveState() {
			return null;
		}

		@Override
		public void startUpdate(View arg0) {
			
		}

		public void onClick(View v) {
			
			
		}

		@Override
		public int getItemPosition(Object object) {
			
			// TODO Auto-generated method stub
			return POSITION_NONE;
		}
		
		//单击
		public void onClickItem( int position,DialAdapter ad){
			DialAdapter tempAdapter;
			tempAdapter  = ad;
			if(currentPosition==position){
				currentPosition=-1;
				
			}else{
				currentPosition=position;
			}
			tempAdapter.setCurrentPosition(currentPosition);
			tempAdapter.notifyDataSetChanged();
		}
		
		public void OnItemLongClick(List<NativeUser> list,ContextMenuInfo menuInfo,ContextMenu menu){
			AdapterView.AdapterContextMenuInfo info;
			List<NativeUser> uList;
			ContextMenuInfo menuInfor;
			ContextMenu menus;
			menus = menu;
			menuInfor = menuInfo;
			uList = list;
			try{
				info =(AdapterView.AdapterContextMenuInfo) menuInfo;
				int position = info.position;
				NativeUser user = uList.get(position);
				menus.setHeaderTitle(user.getPhoneNumber());
				menus.add(0, 0, 0, "从通话记录中删除");
				menus.add(0, 1, 0, "呼叫前修改号码");
			}catch(Exception e){
				e.printStackTrace();
			}
			
		}
		
		
	}

	public class DialOnPageChangeListener implements OnPageChangeListener {

		int one = offset * 2 + bmpW;// 页卡1 -> 页卡2 偏移量
		int two = one * 2;// 页卡1 -> 页卡3 偏移量
		int three = two +bmpW;
		
		public void onPageSelected(int arg0) {
			Animation animation = null;
			System.out.println("arg0    "+arg0);
			System.out.println("currIndex    "+currIndex);
			switch (arg0) {
			case 0:
				if (currIndex == 1) {
					animation = new TranslateAnimation(one, 0, 0, 0);
				} else if (currIndex == 2) {
					animation = new TranslateAnimation(two, 0, 0, 0);
				}else if (currIndex == 3) {
					animation = new TranslateAnimation(three, 0, 0, 0);
				}
				break;
			case 1:
				if (currIndex == 0) {
					animation = new TranslateAnimation(offset, one, 0, 0);
				} else if (currIndex == 2) {
					animation = new TranslateAnimation(two, one, 0, 0);
				}else if (currIndex == 3) {
					animation = new TranslateAnimation(three, one, 0, 0);
				}
				break;
			case 2:
				if (currIndex == 0) {
					animation = new TranslateAnimation(offset, two, 0, 0);
				} else if (currIndex == 1) {
					animation = new TranslateAnimation(one, two, 0, 0);
				}else if (currIndex == 3) {
					animation = new TranslateAnimation(three, two, 0, 0);
				}
				break;
			case 3:
				if (currIndex == 0) {
					animation = new TranslateAnimation(offset, three, 0, 0);
				} else if (currIndex == 1) {
					animation = new TranslateAnimation(one, three, 0, 0);
				} else if(currIndex == 2){
					animation = new TranslateAnimation(two, three, 0, 0);
				}
				break;
			}
			currIndex = arg0;
			animation.setFillAfter(true);// True:图片停在动画结束位置
			animation.setDuration(300);
			dialImageLay.startAnimation(animation);
		}

		public void onPageScrolled(int arg0, float arg1, int arg2) {

		}

		public void onPageScrollStateChanged(int arg0) {

		}
	}
	
}





package com.cy.contact.activity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Stack;

import org.json.JSONObject;
import org.json.JSONStringer;
import org.json.JSONTokener;

import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.Matrix;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.text.Editable;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.TextWatcher;
import android.text.style.ForegroundColorSpan;
import android.util.DisplayMetrics;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnClickListener;
import android.view.View.OnCreateContextMenuListener;
import android.view.View.OnTouchListener;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;

import com.cy.contact.activity.tool.DialAdapter;
import com.cy.contact.dao.NativeCallDao;
import com.cy.contact.dao.UserDao;
import com.cy.contact.pojo.NativeUser;
import com.cy.contact.pojo.User;
import com.cy.contact.pojo.UserContent;
import com.cy.contact.usercontent.action.ActionCode;
import com.cy.contact.util.SpellUtils;
import com.j256.ormlite.dao.ForeignCollection;


/**
 * 警务通讯录   拨号界面
 * @author yutao
 *
 */
public class DialActivity extends ToolBarActivity implements OnClickListener{
	//数字功能键
	private RelativeLayout dialLayout;
	private Button num0Btn,num1Btn,num2Btn,
	num3Btn,num4Btn,num5Btn,num6Btn,
	num7Btn,num8Btn,num9Btn,numStarBtn,
	numPoundBtn,allRecordBtn,noCallBtn;
	private Button delNumBtn;
	private TextView inputBtn;
	//private ListView callLogListView;
	private ListView dialAllList;
	private ListView dialAlreadyList;
	private ListView dialOutList;
	private ListView dialMissList;
	
	private DialAdapter dialAllAdapter;
	private DialAdapter dialAlreadyAdapter; 
	private DialAdapter dialMissAdapter; 
	private DialAdapter dialOutAdapter; 
	private ListView contactListView;       //显示搜索联系人
	
	private int currentPosition=-1;         //记录通话记录点击的位置
	private int searchCurrentPosition=-1;   //记录T9键盘搜索联系人点击位置
	private SearchContactAdapter searchAdapter;			//显示联系人适配器
	//private CallLogAdapter callLogAdapter;      //通话记录数据适配器
	private List<NativeUser> allRecordslist = new ArrayList<NativeUser>();	
	private List<NativeUser> missCallsList=new ArrayList<NativeUser>();
	private List<NativeUser> outCallsList=new ArrayList<NativeUser>();
	
	private List<NativeUser> listRecords=new ArrayList<NativeUser>();
	Stack<String> myStack=new Stack<String>();
	private static final String DAILNUMBER="dail";
	
	private String keyWord=null;           //当前搜索关键字
	private NativeCallDao nadao =null;
	private UserDao udao=null;
	
	private int  callStatusFlag=0;      //为true时表示显示全部通话记录状态,false时显示未接电话
	private int DIALDETAIL = 1;    //通话记录返回状态
	private int delType  = 0;    //设置需要删除通话记录的类别
	
	private RelativeLayout searchLayout;      //搜索界面布局                  默认为invisiable
	private LinearLayout searchBtnlayout;     //搜索界面下按钮布局
	private Button newContactBtn,saveToHaveBtn,sendMsgBtn;   //新建联系人,  保存到已有,发送短信
	private List<User> searchListUser=new ArrayList<User>();  //搜索联系人数据
	
	//viewPager用到变量
    private RelativeLayout dialPage;//viewpager和选项卡  的界面
    private RelativeLayout dialImageLay;
	private ViewPager mPager;// ViewPager内容
	private List<View> listViews; // Tab页面列表
	private ImageView cursor;// 动画图片
	private TextView t1, t2, t3,t4;// 页卡头标
	private int offset = 0;// 动画图片偏移量
	private int currIndex = 0;// 当前页卡编号
	private int bmpW;// 动画图片宽度
	DialPagerAdapter adapter;
	LayoutInflater mInflater;

	
	
	private Handler handler =new Handler(){

		@Override
		public void handleMessage(Message msg) {
			switch(msg.what){
			case 1:
				initData();
				break;
			case 2:
				initData();
				break;
			case 3:
				initData();
				break;
			
			}
		}
	};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.dial_layout);
		
		nadao = NativeCallDao.getInstance(this);
		udao=UserDao.getInstance(this);
		
		initView();
		initData();
		//registerCllBroadCast();
		
		 initImageView();
		 initTextView();
		 initPageView();
	}
	
	
	
	 private void initPageView() {
			mInflater = getLayoutInflater();
			listViews = new ArrayList<View>();
			listViews.add(mInflater.inflate(R.layout.dial_all_layout, null));
			listViews.add(mInflater.inflate(R.layout.dial_miss_layout, null));
			listViews.add(mInflater.inflate(R.layout.dial_out_layout, null));
			listViews.add(mInflater.inflate(R.layout.dial_already_layout, null));
			
			
			adapter = new DialPagerAdapter(listViews);
			mPager = (ViewPager) findViewById(R.id.page); 
			mPager.setAdapter(adapter);
			mPager.setCurrentItem(0);
			mPager.setOnPageChangeListener(new DialOnPageChangeListener());
		}

		private void initTextView() {
			t1 = (TextView) findViewById(R.id.tab1);
			t2 = (TextView) findViewById(R.id.tab2);
			t3 = (TextView) findViewById(R.id.tab3);
			t4 = (TextView) findViewById(R.id.tab4);
			t1.setOnClickListener(new MyOnClickListener(0));
			t2.setOnClickListener(new MyOnClickListener(1));
			t3.setOnClickListener(new MyOnClickListener(2));
			t4.setOnClickListener(new MyOnClickListener(3));
		}

		
		private void initImageView() {
			cursor = (ImageView) findViewById(R.id.cursor);
			dialImageLay = (RelativeLayout) findViewById(R.id.dialImageLay);

			bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.ok)
					.getWidth();
			DisplayMetrics dm = new DisplayMetrics();
			getWindowManager().getDefaultDisplay().getMetrics(dm);
			int screenW = dm.widthPixels;
			offset = (screenW / 4 - bmpW) / 2;
			cursor.setBackgroundResource(R.drawable.ok);
			dialImageLay.setPadding(offset, 0, 0, 0);

		}
	
	
		public class MyOnClickListener implements View.OnClickListener {
			private int index = 0;

			public MyOnClickListener(int i) {
				index = i;
			}

			
			public void onClick(View v) {
				// TODO Auto-generated method stub
				mPager.setCurrentItem(index);
			}
		}

	
	/**
	 * 刷新数据
	 */
	/*public void initData(){
		handler.postDelayed(new Runnable(){
			public void run() {
				
				allRecordslist=app.dbService.getListCall();
				missCallsList=app.dbService.getMissCallsList();
				
			}
			
		}, 100);
	}*/
		public void initData(){
			new Runnable(){
				public void run() {
					allRecordslist.clear();
					missCallsList.clear();
					outCallsList.clear();
					List<NativeUser> la = app.dbService.getListCall();
					List<NativeUser> lm = app.dbService.getMissCallsList();
					List<NativeUser> lo = app.dbService.getOutCallsList();
					allRecordslist.addAll(la);
					missCallsList.addAll(lm);
					outCallsList.addAll(lo);
					System.out.println("outCallsList  "+outCallsList.size());
					System.out.println("lo  "+lo.size());
					
				}
				
			}.run();
		}
	
	
	
	

	public void registerCllBroadCast(){
		IntentFilter callFilter = new IntentFilter();
		callFilter.addAction(app.UPDATE_CALL);
		registerReceiver(callBrodcastResever, callFilter);
	}
	
	private BroadcastReceiver callBrodcastResever = new BroadcastReceiver() {
		
		@Override
		public void onReceive(Context context, Intent intent) {
			String action = intent.getAction();
			if(action == app.UPDATE_CALL){
				app.dbService.initOrRefreshCallRecord();
				app.dbService.initOrRefreshMissCall();
				app.dbService.initOrRefreshOutCall();
				initData();
			}
			
		}
	};
	
	/**
	 * 显示拨号键盘
	 */
	public void showDialLayout(){
		if(dialLayout.getVisibility()==View.VISIBLE){
			dialLayout.setVisibility(View.INVISIBLE);
		}else{
			dialLayout.setVisibility(View.VISIBLE);
		}
	}
	
	
	/**
	 * 通话记录数据适配器
	 * @author yutao
	 *
	 */
	/*class CallLogAdapter extends BaseAdapter{
		private Context context;
		public CallLogAdapter(Context context){
			this.context = context;
		}
		public int getCount() {
			return listRecords.size();
		}
		public Object getItem(int position) {
			return listRecords.get(position);
		}
		public long getItemId(int position) {
			return position;
		}
		
		class ItemView{
			public  ImageView seeImageView;
			public ImageView callImageView;
			public TextView  numberText; 
			public TextView  nameText;
			public TextView timesText;
			public TextView dateText;
			public LinearLayout callPhone;
			public LinearLayout message;
			public LinearLayout dailMail;
			public LinearLayout callrecord;
			public LinearLayout callLogHide;

		}
		
		HashMap<Integer,View> lamp =new  HashMap<Integer,View>();
		public View getView(int position, View convertView, ViewGroup parent) {
			View view;
			ItemView itemView = null;
			if(lamp.get(position) == null){
				convertView  = LayoutInflater.from(context).inflate(R.layout.list_calllog, null);
				itemView = new ItemView();
				itemView.seeImageView = (ImageView)convertView.findViewById(R.id.incallLogImage);
				itemView.callImageView = (ImageView)convertView.findViewById(R.id.shortcut_phone);
				itemView.numberText = (TextView)convertView.findViewById(R.id.callLognumber);
				itemView.nameText = (TextView)convertView.findViewById(R.id.callLogName);
				itemView.timesText = (TextView)convertView.findViewById(R.id.callLogTimes);
				itemView.dateText = (TextView)convertView.findViewById(R.id.callLogdate);
				itemView.callPhone = (LinearLayout)convertView.findViewById(R.id.callPhonelayout);
				itemView.message = (LinearLayout)convertView.findViewById(R.id.smsMessage);
				itemView.dailMail = (LinearLayout)convertView.findViewById(R.id.dail_email);
				itemView.callrecord  = (LinearLayout)convertView.findViewById(R.id.callrecord);
				itemView.callLogHide=(LinearLayout)convertView.findViewById(R.id.callLogHide);
				convertView.setTag(itemView);
				
			}else{
				view = lamp.get(position);
				itemView = (ItemView)view.getTag();
			}
			  final NativeUser user = listRecords.get(position);
			  if(user.getType()==3){
				  if(user.getUserName() ==null){
					  itemView.nameText.setTextColor(getResources().getColor(R.color.miss_dial_color));
					  itemView.nameText.setText("未知");
				  }else{
					  itemView.nameText.setText(user.getUserName());
					  itemView.nameText.setTextColor(getResources().getColor(R.color.miss_dial_color));
				  }
					itemView.numberText.setText(user.getPhoneNumber());
					itemView.dateText.setText(user.getCtreatTime());
					itemView.timesText.setText("("+user.getCount()+")");
					 itemView.numberText.setTextColor(getResources().getColor(R.color.miss_dial_color));
					 itemView.dateText.setTextColor(getResources().getColor(R.color.miss_dial_color));
					 itemView.timesText.setTextColor(getResources().getColor(R.color.miss_dial_color));
					 
			  }else{
				  if(user.getUserName() ==null){
					  itemView.nameText.setText("未知");
				  }else{
					  itemView.nameText.setText(user.getUserName());
				  }
					itemView.numberText.setText(user.getPhoneNumber());
					itemView.dateText.setText(user.getCtreatTime());
					itemView.timesText.setText("("+user.getCount()+")");
			   }
				 
			
			if(currentPosition==-1){
				itemView.callLogHide.setVisibility(View.GONE);
				itemView.callImageView.setVisibility(View.VISIBLE);
			}else if(position==currentPosition){
				itemView.callLogHide.setVisibility(View.VISIBLE);
				itemView.callImageView.setVisibility(View.GONE);
			}else{
				itemView.callLogHide.setVisibility(View.GONE);
				itemView.callImageView.setVisibility(View.VISIBLE);
			}
			
			//image 打电话事件
			itemView.callImageView.setOnClickListener(new OnClickListener() {
				public void onClick(View v) {
					String number = user.getPhoneNumber();
					if(! number.equals("")){
						try{
							Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+number));
							startActivity(intent);
						}catch(Exception e){
							e.printStackTrace();
						}
						
					}
				}
			});
			
			//layout 打电话事件
			itemView.callPhone.setOnClickListener(new OnClickListener() {
				public void onClick(View v) {
					String number = user.getPhoneNumber();
					if(! number.equals("")){
						try{
							Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+number));
							startActivity(intent);
						}catch(Exception e){
							e.printStackTrace();
						}
						
					}
				}
			});
			//发送短信事件
			itemView.message.setOnClickListener(new OnClickListener() {
				String number = user.getPhoneNumber();
				public void onClick(View v) {
					Intent intent = new Intent(DialActivity.this,SmsDetialActivity.class);
					intent.putExtra("number", number);
					intent.putExtra("DAILNUMBER", DAILNUMBER);
					startActivity(intent);
				}
			});
			
			//通话记录详情
			itemView.callrecord.setOnClickListener(new OnClickListener() {
				String number = user.getPhoneNumber();
				public void onClick(View v) {
					 Intent intent = new Intent();
					 intent.putExtra("number", number);
					 intent.putExtra("name", user.getUserName());
					 intent.setClass(DialActivity.this, DialRecordListAcitvity.class);
					 startActivityForResult(intent, DIALDETAIL);
				}
				
			});
			return convertView;
		}
		
		
		
	}*/
	
	public void initView(){
		dialLayout=(RelativeLayout)findViewById(R.id.dialLayout);
		
		num0Btn=(Button)findViewById(R.id.num0Btn);
		num0Btn.setOnClickListener(this);
		
		num1Btn=(Button)findViewById(R.id.num1Btn);
		num1Btn.setOnClickListener(this);
		
		num2Btn=(Button)findViewById(R.id.num2Btn);
		num2Btn.setOnClickListener(this);
		
		num3Btn=(Button)findViewById(R.id.num3Btn);
		num3Btn.setOnClickListener(this);
		
		num4Btn=(Button)findViewById(R.id.num4Btn);
		num4Btn.setOnClickListener(this);
		
		num5Btn=(Button)findViewById(R.id.num5Btn);
		num5Btn.setOnClickListener(this);
		
		num6Btn=(Button)findViewById(R.id.num6Btn);
		num6Btn.setOnClickListener(this);
		
		num7Btn=(Button)findViewById(R.id.num7Btn);
		num7Btn.setOnClickListener(this);
		
		num8Btn=(Button)findViewById(R.id.num8Btn);
		num8Btn.setOnClickListener(this);
		
		num9Btn=(Button)findViewById(R.id.num9Btn);
		num9Btn.setOnClickListener(this);
		
		numStarBtn=(Button)findViewById(R.id.numStarBtn);
		numStarBtn.setOnClickListener(this);
		
		numPoundBtn=(Button)findViewById(R.id.numPoundBtn);
		numPoundBtn.setOnClickListener(this);
		
		inputBtn=(TextView)findViewById(R.id.inputBtn);
		inputBtn.setOnClickListener(this);
		inputBtn.addTextChangedListener(new TextWatcher(){

			public void afterTextChanged(Editable s) {
				
			}

			public void beforeTextChanged(CharSequence s, int start, int count,
					int after) {
				
			}

			public void onTextChanged(CharSequence s, int start, int before,
					int count) {
				
				keyWord=s.toString();
				if(keyWord.equals("")){   //拨号盘没有内容时,隐藏联系人ListView
					searchLayout.setVisibility(View.INVISIBLE);
					main.hideDialLayout();
				}else{
					
					callStatusFlag=3;
					handler.postDelayed(new Runnable(){
						public void run() {
							searchByKeyword(keyWord);
						}
					},10);
					main.showDialLayout();
					if(searchLayout.getVisibility()==View.INVISIBLE){
						searchLayout.setVisibility(View.VISIBLE);
					}
				}
				
			}
			
		});
		
		delNumBtn=(Button)findViewById(R.id.delNumBtn);
		delNumBtn.setOnClickListener(this);
		allRecordBtn=(Button)findViewById(R.id.dial_allrecord_btn);
		allRecordBtn.setOnClickListener(new MyOnClickListener(0));
		noCallBtn = (Button)findViewById(R.id.dial_norecord_btn);
		noCallBtn.setOnClickListener(new MyOnClickListener(1));
		dialPage = (RelativeLayout)findViewById(R.id.dialPage);
		
	   //通话记录listView
     /*  callLogListView = (ListView)findViewById(R.id.phoneRecordView);//
       callLogAdapter = new CallLogAdapter(this);
	   callLogListView.setAdapter(callLogAdapter);
		*/
		//点击隐藏键盘
	   dialPage.setOnTouchListener(new OnTouchListener() {
			public boolean onTouch(View v, MotionEvent event) {
				if(dialLayout.isShown()){
					dialLayout.setVisibility(View.INVISIBLE);
				}
				return false;
			}
		});
		
		/*//单击按钮用来隐藏listViewITem 项
		callLogListView.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				
				if( position != currentPosition ){
					currentPosition = position;
				}else{
					currentPosition = -1;
				}
				callLogAdapter.notifyDataSetChanged();
			}
		});
	      //长按
		callLogListView.setOnItemLongClickListener(new OnItemLongClickListener() {
			public boolean onItemLongClick(AdapterView<?> parent, View view,
					int position, long id) {
				return false;
			}
		});
		*/
		
		
		
	   searchLayout=(RelativeLayout) findViewById(R.id.searchLayout);//搜索联系人
	   searchBtnlayout=(LinearLayout) findViewById(R.id.searchBtnlayout);
	   
	   newContactBtn=(Button) findViewById(R.id.newContachBtn);
	   newContactBtn.setOnClickListener(this);
	   saveToHaveBtn=(Button) findViewById(R.id.saveToHaveBtn);
	   saveToHaveBtn.setOnClickListener(this);
	   sendMsgBtn=(Button) findViewById(R.id.sendMsgBtn);
	   sendMsgBtn.setOnClickListener(this);
		
	   //搜索显示联系人
	   contactListView=(ListView)findViewById(R.id.contactListView);
	   searchAdapter=new SearchContactAdapter(this);
	   contactListView.setAdapter(searchAdapter);
	   
	   contactListView.setOnTouchListener(new OnTouchListener() {
			public boolean onTouch(View v, MotionEvent event) {
				if(dialLayout.isShown()){
					dialLayout.setVisibility(View.INVISIBLE);
				}
				return false;
			}
		});
	   
	   //取得搜索Position
	   contactListView.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				
				if(position != searchCurrentPosition){
					searchCurrentPosition = position;
				}else{
					searchCurrentPosition = -1;
				}
				searchAdapter.notifyDataSetChanged();
			}
		});
	   
	   
	}
	
	
	@Override
	public boolean onContextItemSelected(MenuItem item) {
		AdapterView.AdapterContextMenuInfo menuInfo;
		menuInfo = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
		int position = menuInfo.position;
		System.out.println("delType  :"+delType);
		if(delType ==1){
			final NativeUser user = allRecordslist.get(position);
			
			switch(item.getItemId()){
			case 0:     //删除通话记录
				
				handler.post(new Runnable(){
					public void run(){
						allRecordslist.clear();
						nadao.delCallRecord(user.getPhoneNumber());
						app.dbService.initOrRefreshCallRecord();
						app.dbService.initOrRefreshMissCall();
						app.dbService.initOrRefreshOutCall();
						initData();
						
						//allRecordslist=app.dbService.getListCall();
						dialAllAdapter.notifyDataSetChanged();
						adapter.notifyDataSetChanged();
						
					}
				});
				
				
				break;
			case 1:
				final EditText ed = new EditText(this);
				ed.setText(user.getPhoneNumber());
				new AlertDialog.Builder(this).setTitle("编辑号码")
				.setView(ed).setPositiveButton("呼叫", new DialogInterface.OnClickListener() {
					
					public void onClick(DialogInterface dialog, int which) {
						String number = ed.getText().toString();
						if(! number.equals("")){
							Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+number));
							startActivity(intent);
						}
					}
				})
				.setNegativeButton("取消", null).show();
				break;
			}
			
		}else if(delType == 2){
			final NativeUser user = missCallsList.get(position);
						
						switch(item.getItemId()){
						case 0:     //删除通话记录
							
							handler.post(new Runnable(){
								public void run(){
									missCallsList.clear();
									nadao.delCallRecord(user.getPhoneNumber());
									app.dbService.initOrRefreshCallRecord();
									app.dbService.initOrRefreshMissCall();
									app.dbService.initOrRefreshOutCall();
									initData();
									
									//missCallsList=app.dbService.getMissCallsList();
									dialMissAdapter.notifyDataSetChanged();
									adapter.notifyDataSetChanged();
									
									
								}
							});
							
							
							break;
						case 1:
							final EditText ed = new EditText(this);
							ed.setText(user.getPhoneNumber());
							new AlertDialog.Builder(this).setTitle("编辑号码")
							.setView(ed).setPositiveButton("呼叫", new DialogInterface.OnClickListener() {
								
								public void onClick(DialogInterface dialog, int which) {
									String number = ed.getText().toString();
									if(! number.equals("")){
										Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+number));
										startActivity(intent);
									}
								}
							})
							.setNegativeButton("取消", null).show();
							break;
						}
		}else if(delType == 3){
			
				final NativeUser user = outCallsList.get(position);
				
				switch(item.getItemId()){
				case 0:     //删除通话记录
					
					handler.post(new Runnable(){
						public void run(){
							outCallsList.clear();
							nadao.delCallRecord(user.getPhoneNumber());
							app.dbService.initOrRefreshCallRecord();
							app.dbService.initOrRefreshMissCall();
							app.dbService.initOrRefreshOutCall();
							initData();
							
							//missCallsList=app.dbService.getMissCallsList();
							dialOutAdapter.notifyDataSetChanged();
							adapter.notifyDataSetChanged();
						
							
						}
					});
					
					
					break;
				case 1:
					final EditText ed = new EditText(this);
					ed.setText(user.getPhoneNumber());
					new AlertDialog.Builder(this).setTitle("编辑号码")
					.setView(ed).setPositiveButton("呼叫", new DialogInterface.OnClickListener() {
						
						public void onClick(DialogInterface dialog, int which) {
							String number = ed.getText().toString();
							if(! number.equals("")){
								Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+number));
								startActivity(intent);
							}
						}
					})
					.setNegativeButton("取消", null).show();
					break;
				}
			
		}
		
		
		return super.onContextItemSelected(item);
	}
	
	
	
	
	/**
	 * 根据关键字搜索
	 * @param keyWord
	 */
	public void searchByKeyword(String keyWord){
		if(keyWord!=null){
			
			if(!keyWord.equals("")){
				if(searchLayout.getVisibility()==View.INVISIBLE||searchLayout.getVisibility()==View.GONE){
					dialPage.setVisibility(View.INVISIBLE);
					
					searchLayout.setVisibility(View.VISIBLE);
				}
				
				searchListUser.clear();
				searchListUser=udao.getListUserByT9Num(keyWord);
				if(searchListUser.size()==0){
					searchBtnlayout.setVisibility(View.VISIBLE);
				}else{
					searchBtnlayout.setVisibility(View.GONE);
					searchAdapter.notifyDataSetChanged();
				}
				
			}else{
				searchLayout.setVisibility(View.INVISIBLE);
				if(dialPage.getVisibility()==View.INVISIBLE){
					dialPage.setVisibility(View.VISIBLE);
					searchLayout.setVisibility(View.INVISIBLE);
				}
			}
			
			
		}
		
	}
	
	
	

	

	public void onClick(View v) {
		
		switch(v.getId()){
		
		case R.id.num0Btn:
			myStack.add("0");
			break;
		case R.id.num1Btn:
			myStack.add("1");
			break;
		case R.id.num2Btn:
			myStack.add("2");
			break;
		case R.id.num3Btn:
			myStack.add("3");
			break;
		case R.id.num4Btn:
			myStack.add("4");
			break;
		case R.id.num5Btn:
			myStack.add("5");
			break;
		case R.id.num6Btn:
			myStack.add("6");
			break;
		case R.id.num7Btn:
			myStack.add("7");
			break;
		case R.id.num8Btn:
			myStack.add("8");
			break;
		case R.id.num9Btn:
			myStack.add("9");
			break;
		case R.id.numStarBtn:
			myStack.add("*");
			break;
		case R.id.numPoundBtn:
			myStack.add("#");
			break;
		case R.id.delNumBtn:
			if(!myStack.isEmpty()){
				myStack.pop();
			}
			break;
		case R.id.inputBtn:
			 String phoneNumber=getStackText();
			 if(!phoneNumber.equals("")){
				 try{
					 Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+phoneNumber));
					 startActivity(intent);
				 }catch(Exception e){
					 e.printStackTrace();
				 }
			 }
			break;
		/*case R.id.dial_allrecord_btn:  //全部电话记录
			
			if(searchLayout.getVisibility()==View.VISIBLE){
				searchLayout.setVisibility(View.INVISIBLE);
			}
			if(callLogListView.getVisibility()==View.INVISIBLE){
				callLogListView.setVisibility(View.VISIBLE);
			}
			if(callStatusFlag==0){
				return;
			}
			callStatusFlag=0;
			listRecords.clear();
			listRecords.addAll(allRecordslist);
			callLogAdapter.notifyDataSetChanged();
			break;	
			
		case R.id.dial_norecord_btn:     //未接电话
			
			if(searchLayout.getVisibility()==View.VISIBLE){
				searchLayout.setVisibility(View.INVISIBLE);
			}
			if(callLogListView.getVisibility()==View.INVISIBLE){
				callLogListView.setVisibility(View.VISIBLE);
			}
			
			if(callStatusFlag==1){
				return;
			}
			callStatusFlag=1;
			listRecords.clear();
			listRecords.addAll(missCallsList);
			callLogAdapter.notifyDataSetChanged();
			break;*/
		case R.id.newContachBtn:   //新建联系人
			User u=new User();
			UserContent content=new UserContent();
			content.setContentCategory(ActionCode.PHONE_ACTION);
			content.setContentText(getStackText());
			u.getListContent().add(content);
			app.setEditUser(u);
			startActivity(new Intent(DialActivity.this,EditContactActivity.class).putExtra("create",1));
			break;
		case R.id.saveToHaveBtn:   //保存到已有
			startActivity(new Intent(DialActivity.this,SelectContactsActivity.class).putExtra("actionCode",1).putExtra("data", getStackText()));
			break;
		case R.id.sendMsgBtn:      //发送短信
			Intent intentsms = new Intent(Intent.ACTION_VIEW);  
			intentsms.putExtra("sms_body",""); 
			intentsms.putExtra("address",getStackText()); 
			intentsms.setType("vnd.android-dir/mms-sms");
			startActivity(intentsms);
			break;
		default:
			break;
		}
		setInputBtnText();
	}


	public void setInputBtnText(){
		String s=getStackText();
		inputBtn.setText(s);
	}
	
	/**
	 * 获取栈内容
	 * @return
	 */
	public String getStackText(){
		Iterator iter=myStack.iterator();
		StringBuffer sb=new StringBuffer();
		while(iter.hasNext()){
			String s=(String) iter.next();
			sb.append(s);
		}
		return sb.toString();
	}
	
	
	class SearchContactAdapter extends BaseAdapter{
		
		private Context context;
		
		public SearchContactAdapter(Context context){
			this.context=context;
		}
		
		public int getCount() {
			
			return searchListUser.size();
		}

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

		public long getItemId(int position) {
			
			return position;
		}
		
		class ItemView{
			public TextView nameTextView;     //姓名
			public TextView pinyinTextView;   //拼音
			public TextView numTextView;      //电话号码
			public TextView whereTextView;    //归属地
			public ImageView shortCutPhone;    //打电话
			public LinearLayout hideLayout;   //隐藏视图
			
			public LinearLayout callBtn;
			public LinearLayout msgBtn;
			public LinearLayout emailBtn;
			public LinearLayout detailBtn;

		}
		public View getView(int position, View convertView, ViewGroup parent) {
			
			ItemView itemView = null;
			 
			if(convertView == null){
				convertView  = LayoutInflater.from(context).inflate(R.layout.dial_search_item, null);
				itemView = new ItemView();
				
				
				itemView.nameTextView = (TextView)convertView.findViewById(R.id.nameTextView);
				itemView.pinyinTextView = (TextView)convertView.findViewById(R.id.pinyinTextView);
				itemView.numTextView = (TextView)convertView.findViewById(R.id.numTextView);
				itemView.whereTextView = (TextView)convertView.findViewById(R.id.whereTextView);
				
				itemView.shortCutPhone = (ImageView)convertView.findViewById(R.id.shortcutPhone);
				itemView.hideLayout=(LinearLayout)convertView.findViewById(R.id.hideLayout);
				
				itemView.callBtn=(LinearLayout)convertView.findViewById(R.id.callBtn);
				itemView.msgBtn=(LinearLayout)convertView.findViewById(R.id.msgBtn);
				itemView.emailBtn=(LinearLayout)convertView.findViewById(R.id.emailBtn);
				itemView.detailBtn=(LinearLayout)convertView.findViewById(R.id.detailBtn);
				
				
				convertView.setTag(itemView);
				
			}else{
				itemView = (ItemView)convertView.getTag();
			}
			
			final User u=searchListUser.get(position);
			
			setNameHightLight(itemView.nameTextView,u.getMemberName(),u.getMemberNameNum());
			//setPinyinHightLight(itemView.pinyinTextView,u.getMemberName(),u.getMemberNameNum());
			setPhoneNumHightLight(itemView.numTextView,keyWord,u);
			
			final String phoneNum=itemView.numTextView.getText().toString();
			//image 打电话事件
			itemView.shortCutPhone.setOnClickListener(new OnClickListener() {
				public void onClick(View v) {
					String number = phoneNum;
					if(! number.equals("")){
						try{
							Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+number));
							startActivity(intent);
						}catch(Exception e){
							e.printStackTrace();
						}
						
					}
				}
			});
			
			//隐藏菜单   打电话按钮
			itemView.callBtn.setOnClickListener(new OnClickListener() {
				public void onClick(View v) {
					String number = phoneNum;
					if(! number.equals("")){
						try{
							Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+number));
							startActivity(intent);
						}catch(Exception e){
							e.printStackTrace();
						}
						
					}
				}
			});
			
			itemView.msgBtn.setOnClickListener(new OnClickListener() {
				public void onClick(View v) {
					Intent intent = new Intent(DialActivity.this,SmsDetialActivity.class);
					intent.putExtra("number", phoneNum);
					intent.putExtra("DAILNUMBER", DAILNUMBER);
					startActivity(intent);
				}
			});
			
			itemView.emailBtn.setOnClickListener(new OnClickListener() {
				public void onClick(View v) {
					
				}
			});
			
			itemView.detailBtn.setOnClickListener(new OnClickListener() {
				public void onClick(View v) {
					app.setEditUser(u);
					startActivity(new Intent(DialActivity.this,EditContactActivity.class).putExtra("create",3));
				}
			});
			
			if(searchCurrentPosition==-1){
				itemView.hideLayout.setVisibility(View.GONE);
			}else if(position==searchCurrentPosition){
				itemView.hideLayout.setVisibility(View.VISIBLE);
			}else{
				itemView.hideLayout.setVisibility(View.GONE);
			}
			
			return convertView;
		}
		
	}
	
	
	
	
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if(requestCode == DIALDETAIL){
			int result = data.getIntExtra("dialBack", 0);
			if(result == 1){
				app.dbService.initOrRefreshCallRecord();
				app.dbService.initOrRefreshMissCall();
				app.dbService.initOrRefreshOutCall();
				Message msg = new Message();
				msg.what = 3;
				handler.sendMessage(msg);
				
			}
		}
		super.onActivityResult(requestCode, resultCode, data);
	}

	/**
	 * 设置姓名高亮
	 * @param tv
	 * @param text
	 */
	protected void setNameHightLight(TextView tv,String text,String json){
		
		SpannableStringBuilder style= new  SpannableStringBuilder(text); 
		try{
			JSONObject o=new JSONObject(json);
			String [] arr2=text.split("");
			for(int j=0;j<arr2.length;j++){
				String ss=arr2[j];
				if(!ss.equals("")){
					if(!o.isNull((j-1)+"")){
						String value=o.getString((j-1)+"");
						if(value.charAt(0)=='1'){
							style.setSpan( new  ForegroundColorSpan(Color.BLUE),j-1,j,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
						}
					}
				}
			}
			
		}catch(Exception e){
			e.printStackTrace();
		}
		tv.setText(style); 
	}
	
	
	/**
	 * 设置搜索拼音文字高亮
	 * @param tv   
	 * @param text    //文字内容
	 */
	protected void setPinyinHightLight(TextView tv,String text,String json){
		
		String letter=SpellUtils.getFull(text);   //获取姓名的全称的拼音
		SpannableStringBuilder style= new  SpannableStringBuilder(letter); 
		
		try{
			JSONObject o=new JSONObject(json);
			String [] arr2=text.split("");
			int length2=arr2.length;
			int index=0;
			int move=0;
			for(int j=0;j<length2;j++){
				String ss=arr2[j];
				if(j>0){
					move=move+SpellUtils.getFull(arr2[j-1]).length();
				    index=move;
				}
				if(!ss.equals("")){
					if(!o.isNull((j-1)+"")){
						String value=o.getString((j-1)+"");
						if(value.charAt(0)=='0'){
							continue;
						}
						for(char c:value.toCharArray()){
							if(c=='1'){
								style.setSpan( new  ForegroundColorSpan(Color.BLUE),index,index+1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
							}
							index++;
						}
						
					}
				}
			}
			
		}catch(Exception e){
			e.printStackTrace();
		}
		tv.setText(style); 
		
	}
	
	/**
	 * 设置电话号码高亮
	 * @param tv
	 * @param keyWord
	 * @param u
	 */
	public void setPhoneNumHightLight(TextView tv,String keyWord,User u){
		ForeignCollection<UserContent>  contents=u.getContents();
		if(contents!=null){
			for(UserContent content:contents){
				if(ActionCode.PHONE_ACTION.equals(content.getContentCategory())){
					String num=content.getContentText();
					if(num!=null){
						if(keyWord.length()>=2){
							int start=num.indexOf(keyWord);
							if(start!=-1){
								int length=keyWord.length();
								SpannableStringBuilder style= new  SpannableStringBuilder(num);
								style.setSpan( new  ForegroundColorSpan(Color.BLUE),start,start+length,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
								tv.setText(style);
								break;
							}else{
								tv.setText(num);
							}
						}else{
							tv.setText(num);
							break;
						}
						
						 
					}
				}
			}
		}
		
	}
	

	public class DialPagerAdapter extends PagerAdapter implements OnClickListener {
		public List<View> mListViews;
		public View v1;
		public View v2;
		public View v3;
		public View v4;
		
		public DialPagerAdapter(List<View> mListViews) {
			this.mListViews = mListViews;
			getViewClickListener(mListViews);
		}

		public void getViewClickListener(List<View> listview) {
			
			
			v1 = listview.get(0);
			v2 = listview.get(1);
			v3 = listview.get(2);
			v4 = listview.get(3);
			
			//所有
			dialAllList = (ListView)v1.findViewById(R.id.dial_all_list);
			dialAllList.setOnItemClickListener(new OnItemClickListener() {
				public void onItemClick(AdapterView<?> arg0, View arg1,
						int position, long arg3) {
					onClickItem(position,dialAllAdapter);
				}
				
			});
			dialAllList.setOnItemLongClickListener(new OnItemLongClickListener() {
				public boolean onItemLongClick(AdapterView<?> parent, View view,
						int position, long id) {
					delType = 1;
					return false;
				}
			});
			
			dialAllList.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
				public void onCreateContextMenu(ContextMenu menu, View v,
						ContextMenuInfo menuInfo) {
					
					OnItemLongClick(allRecordslist,menuInfo, menu);
				}
			});
			//未接
			dialMissList = (ListView)v2.findViewById(R.id.dial_miss_list);
			dialMissList.setOnItemClickListener(new OnItemClickListener() {
				public void onItemClick(AdapterView<?> parent, View view,
						int position, long id) {
					onClickItem(position,dialMissAdapter);
					
				}
			});
			dialMissList.setOnItemLongClickListener(new OnItemLongClickListener() {
				public boolean onItemLongClick(AdapterView<?> parent,
						View view, int position, long id) {
					delType = 2;
					return false;
				}
			});
			dialMissList.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
				public void onCreateContextMenu(ContextMenu menu, View v,
						ContextMenuInfo menuInfo) {
					OnItemLongClick(missCallsList,menuInfo, menu);
					
				}
			});
			//已拨打
			
			dialOutList = (ListView)v3.findViewById(R.id.dial_out_list);
			dialOutList.setOnItemClickListener(new OnItemClickListener() {
				public void onItemClick(AdapterView<?> parent, View view,
						int position, long id) {
					onClickItem(position,dialOutAdapter);
					
				}
			});
			dialOutList.setOnItemLongClickListener(new OnItemLongClickListener() {
				public boolean onItemLongClick(AdapterView<?> parent,
						View view, int position, long id) {
					delType = 3;
					return false;
				}
			});
			dialOutList.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
				public void onCreateContextMenu(ContextMenu menu, View v,
						ContextMenuInfo menuInfo) {
					OnItemLongClick(outCallsList,menuInfo, menu);
					
				}
			});
			
		}

		public void destroyItem(View arg0, int arg1, Object arg2) {
			((ViewPager) arg0).removeView(mListViews.get(arg1));
		}

		public void finishUpdate(View arg0) {
		}

		@Override
		public int getCount() {
			return mListViews.size();
		}

		@Override
		public Object instantiateItem(View arg0, int arg1) {
			((ViewPager) arg0).addView(mListViews.get(arg1), 0);
			
			if(arg1==0){
				
				System.out.println("allRecordslist  :"+allRecordslist.size());
				dialAllAdapter = new DialAdapter(DialActivity.this,allRecordslist);
				dialAllList.setAdapter(dialAllAdapter);
			}else if(arg1 == 1){
				
				dialMissAdapter = new DialAdapter(DialActivity.this,missCallsList);
				 dialMissList.setAdapter(dialMissAdapter);
				
			}else if(arg1 == 3){
				
				dialOutAdapter = new DialAdapter(DialActivity.this,outCallsList);
				dialOutList.setAdapter(dialOutAdapter);
			}
			
			return mListViews.get(arg1);
		}

		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			return arg0 == (arg1);
		}

		@Override
		public void restoreState(Parcelable arg0, ClassLoader arg1) {
		}

		@Override
		public Parcelable saveState() {
			return null;
		}

		@Override
		public void startUpdate(View arg0) {
			
		}

		public void onClick(View v) {
			
			
		}

		@Override
		public int getItemPosition(Object object) {
			
			// TODO Auto-generated method stub
			return POSITION_NONE;
		}
		
		//单击
		public void onClickItem( int position,DialAdapter ad){
			DialAdapter tempAdapter;
			tempAdapter  = ad;
			if(currentPosition==position){
				currentPosition=-1;
				
			}else{
				currentPosition=position;
			}
			tempAdapter.setCurrentPosition(currentPosition);
			tempAdapter.notifyDataSetChanged();
		}
		
		public void OnItemLongClick(List<NativeUser> list,ContextMenuInfo menuInfo,ContextMenu menu){
			AdapterView.AdapterContextMenuInfo info;
			List<NativeUser> uList;
			ContextMenuInfo menuInfor;
			ContextMenu menus;
			menus = menu;
			menuInfor = menuInfo;
			uList = list;
			try{
				info =(AdapterView.AdapterContextMenuInfo) menuInfo;
				int position = info.position;
				NativeUser user = uList.get(position);
				menus.setHeaderTitle(user.getPhoneNumber());
				menus.add(0, 0, 0, "从通话记录中删除");
				menus.add(0, 1, 0, "呼叫前修改号码");
			}catch(Exception e){
				e.printStackTrace();
			}
			
		}
		
		
	}

	public class DialOnPageChangeListener implements OnPageChangeListener {

		int one = offset * 2 + bmpW;// 页卡1 -> 页卡2 偏移量
		int two = one * 2;// 页卡1 -> 页卡3 偏移量
		int three = two +bmpW;
		
		public void onPageSelected(int arg0) {
			Animation animation = null;
			System.out.println("arg0    "+arg0);
			System.out.println("currIndex    "+currIndex);
			switch (arg0) {
			case 0:
				if (currIndex == 1) {
					animation = new TranslateAnimation(one, 0, 0, 0);
				} else if (currIndex == 2) {
					animation = new TranslateAnimation(two, 0, 0, 0);
				}else if (currIndex == 3) {
					animation = new TranslateAnimation(three, 0, 0, 0);
				}
				break;
			case 1:
				if (currIndex == 0) {
					animation = new TranslateAnimation(offset, one, 0, 0);
				} else if (currIndex == 2) {
					animation = new TranslateAnimation(two, one, 0, 0);
				}else if (currIndex == 3) {
					animation = new TranslateAnimation(three, one, 0, 0);
				}
				break;
			case 2:
				if (currIndex == 0) {
					animation = new TranslateAnimation(offset, two, 0, 0);
				} else if (currIndex == 1) {
					animation = new TranslateAnimation(one, two, 0, 0);
				}else if (currIndex == 3) {
					animation = new TranslateAnimation(three, two, 0, 0);
				}
				break;
			case 3:
				if (currIndex == 0) {
					animation = new TranslateAnimation(offset, three, 0, 0);
				} else if (currIndex == 1) {
					animation = new TranslateAnimation(one, three, 0, 0);
				} else if(currIndex == 2){
					animation = new TranslateAnimation(two, three, 0, 0);
				}
				break;
			}
			currIndex = arg0;
			animation.setFillAfter(true);// True:图片停在动画结束位置
			animation.setDuration(300);
			dialImageLay.startAnimation(animation);
		}

		public void onPageScrolled(int arg0, float arg1, int arg2) {

		}

		public void onPageScrollStateChanged(int arg0) {

		}
	}
	
}