首页 > 代码库 > Android项目之weiyi通讯录(一)

Android项目之weiyi通讯录(一)

好久没有写博客了,这几天都在忙这找工作也没有时间写博客,这周想休息下  就做了这个小项目,当练习

凌晨了还在这是写博客 希望能帮助到需要的人

先说说这个项目的功能吧 有联系人列表,通话记录,短信记录,设置。可能后期会加入一些功能,这个项目主要使用类似微信UI效果,个人觉得还不错哦

在联系人列表使用了自定义控件,等等吧后面会介绍的

-----------欢迎加入交流群 386451316 有问题一起讨论吧

请注明转载地址 这么晚写不容易啊 

先看看效果图吧 这是第一个模块 接下来会继续更新的


今天先介绍 Fragment+RadioButton替代tabhost 貌似是最流行的模式,,

接下来介绍布局看图


activity_main.xml文件

<RelativeLayout xmlns:andactivity_main.xmlroid="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:background="#FFF"
    android:layout_height="match_parent" >

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/titlelayout" >
    </android.support.v4.view.ViewPager>

    <LinearLayout
        android:id="@+id/titlelayout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true" >

        <RadioGroup
            android:id="@+id/tab_menu"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/tab_bg_normal"
            android:orientation="horizontal" >

            <RadioButton
                android:id="@+id/title1"
                style="@style/tab_style"
                android:checked="true"
                android:drawableTop="@drawable/tab_activity_selector"
                android:text="联系人" />

            <RadioButton
                android:id="@+id/title2"
                style="@style/tab_style"
                android:drawableTop="@drawable/tab_activity_selector"
                android:text="通话记录" />

            <FrameLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" >

                <RadioButton
                    android:id="@+id/title3"
                    style="@style/tab_styles"
                    android:drawableBottom="@drawable/tab_activity_selector" />
            </FrameLayout>

            <RadioButton
                android:id="@+id/title4"
                style="@style/tab_style"
                android:drawableTop="@drawable/tab_activity_selector"
                android:text="短信" />

            <RadioButton
                android:id="@+id/title5"
                style="@style/tab_style"
                android:drawableTop="@drawable/tab_activity_selector"
                android:text="设置" />
        </RadioGroup>
    </LinearLayout>

</RelativeLayout>

每一页文件

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

	<TextView
		android:id="@+id/tv_tab4"
		android:layout_width="fill_parent"
		android:layout_height="match_parent"
		android:text="信息列表"
		android:textSize="28sp" />

</RelativeLayout>

以上都是布局文件 有基础的都能看得懂吧 其实这一期的都是基础

package com.zw.weiyi.phonesms;

import java.util.ArrayList;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.RadioButton;
import android.widget.Toast;

import com.zw.weiyi.fragment.CallFragment;
import com.zw.weiyi.fragment.InfoFragment;
import com.zw.weiyi.fragment.SettingFragment;
import com.zw.weiyi.fragment.SmsFragment;
import com.zw.weiyi.util.MyApplication;
/**
 * 
 * @author Striver_zw
 *   Date  2014-11-19
 */
public class MainActivity extends BaseActivity implements OnPageChangeListener {
	private ViewPager pager;
	private PagerAdapter mAdapter;

	private ArrayList<Fragment> fragments;
	private ArrayList<RadioButton> title = new ArrayList<RadioButton>();// 4个标题
	//拨号按钮
	private RadioButton bu;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);// /slidingmenu里面重写了
		initView();// 初始化控件
		initTitle();
		initViewPager();
		bu.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				Toast.makeText(MainActivity.this, "中间的", 1).show();
				
			}
		});
	}

	/**
	 * 初始化视图
	 */
	private void initView() {
		bu = (RadioButton) findViewById(R.id.title3);
		pager = (ViewPager) findViewById(R.id.pager);// 初始化控件
		fragments = new ArrayList<Fragment>();// 初始化数据
		fragments.add(new InfoFragment(this));
		fragments.add(new CallFragment());
//		fragments.add(new PhoneFragment());
		fragments.add(new SmsFragment());
		fragments.add(new SettingFragment(this));
	}

	/**
	 * 初始化ViewPager
	 */
	private void initViewPager() {
		mAdapter = new MyViewPagerAdapter(getSupportFragmentManager(), fragments);
		pager.setAdapter(mAdapter);
		pager.setOnPageChangeListener(this);
		pager.setCurrentItem(0);// 设置成当前第一个
	}

	/**
	 * 初始化几个用来显示title的RadioButton
	 */
	private void initTitle() {
		title.add((RadioButton) findViewById(R.id.title1));// 三个title标签
		title.add((RadioButton) findViewById(R.id.title2));
//		title.add((RadioButton) findViewById(R.id.title3));
		title.add((RadioButton) findViewById(R.id.title4));
		title.add((RadioButton) findViewById(R.id.title5));
		title.get(0).setOnClickListener(new MyOnClickListener(0));// 设置响应
		title.get(1).setOnClickListener(new MyOnClickListener(1));
		title.get(2).setOnClickListener(new MyOnClickListener(2));
		title.get(3).setOnClickListener(new MyOnClickListener(3));
	}

	/**
	 * 重写OnClickListener的响应函数,主要目的就是实现点击title时,pager会跟着响应切换
	 * 
	 * @author 
	 * 
	 */
	private class MyOnClickListener implements OnClickListener {
		private int index;

		public MyOnClickListener(int index) {
			this.index = index;
		}

		@Override
		public void onClick(View v) {
			pager.setCurrentItem(index);// 把viewpager的视图切过去,实现捏造title跟pager的联动
			title.get(index).setChecked(true);// 设置被选中,否则布局里面的背景不会切换
		}

	}

	/**
	 * 下面三个是OnPageChangeListener的接口函数
	 */
	@Override
	public void onPageScrollStateChanged(int arg0) {
	}

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

	@Override
	public void onPageSelected(int arg0) {
		title.get(arg0).setChecked(true);// 保持页面跟按钮的联动
	}
	
	//记录退出次数
	protected int dFilnish=0;
	//拦截触摸事件
	@Override
	public boolean dispatchTouchEvent(MotionEvent ev) {
		dFilnish=0;//清零 误按处理
		return super.dispatchTouchEvent(ev);
	}
	
	@Override
	public boolean onKeyUp(int keyCode, KeyEvent event) {
		if(keyCode==KeyEvent.KEYCODE_BACK){//回退键
			dFilnish++;
			if(dFilnish==1){
				Toast.makeText(this, "再点击就退出", Toast.LENGTH_LONG).show();
			}else if(dFilnish ==2){
				MyApplication.getInstance().AppExit();
//				super.finish();
			}
			return true;
		}
		return super.onKeyUp(keyCode, event);
	}

}
以上代码都有注释的应该不是很难

每一页的java代码

package com.zw.weiyi.fragment;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.zw.weiyi.phonesms.R;

public class PhoneFragment extends Fragment {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		View view = inflater.inflate(R.layout.phone_fragment, container, false);
		// 缓存的rootView需要判断是否已经被加过parent,如果有parent需要从parent删除,要不然会发生IllegalStateException。
		ViewGroup parent = (ViewGroup) view.getParent();
		if (parent != null) {
			parent.removeView(view);
		}
		return view;
	}

}

使用适配器  FragmentPagerAdapter 加载到里面 看代码吧

package com.zw.weiyi.phonesms;

import java.util.ArrayList;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
/**
 * 这个adapter里面有Fragment数组
 * @author Striver_zw
 *   Date  2014-11-19
 */
public class MyViewPagerAdapter extends FragmentPagerAdapter {
	private ArrayList<Fragment> fragments;//需要添加到上面的Fragment
	
	public MyViewPagerAdapter(FragmentManager fm) {
		super(fm);
	}
	/**
	 * 自定义的构造函数
	 * @param fm
	 * @param fragments ArrayList<Fragment>
	 */
	public MyViewPagerAdapter(FragmentManager fm,ArrayList<Fragment> fragments) {
		super(fm);
		this.fragments = fragments;
	}
	@Override
	public Fragment getItem(int arg0) {
		return fragments.get(arg0);//返回Fragment对象
	}
	@Override
	public int getCount() {
		return fragments.size();//返回Fragment的个数
	}
}

今天就到这里吧先把框架搭建起来了

Android项目之weiyi通讯录(一)