当前位置: 代码迷 >> Android >> Android项目之weiyi通讯录(1)
  详细解决方案

Android项目之weiyi通讯录(1)

热度:38   发布时间:2016-04-28 03:32:38.0
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的个数	}}

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

  相关解决方案