通讯录之FragMent的应用实列

来源:互联网 发布:mac unable to launch 编辑:程序博客网 时间:2024/05/18 02:54

FragMent在安卓3.0版本后引用进来,其实就相当于Activity的一个 片段,可以不用在清单文件中配置,所以使用非常方便。
mtab那里我就不多说了,慕课网那里有相应的教程。简单来说呢,就是创建一个类,然后继承FargMent,fargment也要有对应的XML文件,在onCreateView里把布局文件加载进来,这里呢是通讯录里的一个联系人模块,在通讯录中我用了四个fragment,分别是拨号界面,通话记录,联系人,还有短信,在一个MainActivity中动态的加载进去。

<?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" >  <com.huang.readsystemcontacts.view.ClearEditText       android:id="@+id/filter_edit"        android:layout_marginTop="5dp"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:background="@drawable/search_bar_edit_selector"        android:drawableLeft="@drawable/search_bar_icon_normal"        android:hint="@string/search"        android:singleLine="true"        android:textSize="15.0dip"             />    <FrameLayout        android:layout_width="fill_parent"        android:layout_height="fill_parent" >        <ListView            android:id="@+id/address_list_view"            android:layout_width="fill_parent"            android:layout_height="fill_parent"            android:layout_gravity="center"            android:divider="@null" >        </ListView>        <TextView            android:id="@+id/dialog"            android:layout_width="80.0dip"            android:layout_height="80.0dip"            android:layout_gravity="center"            android:background="@drawable/show_head_toast_bg"            android:gravity="center"            android:textColor="#ffffffff"            android:textSize="30.0dip"            android:visibility="invisible" />        <com.huang.readsystemcontacts.view.SideBar            android:id="@+id/sidrbar"            android:layout_width="30.0dip"            android:layout_height="fill_parent"            android:layout_gravity="right|center" />    </FrameLayout></LinearLayout>

布局预览图,可以忽略索引条和搜索框

在Fragment中把布局加载进来

package com.huang.readsystemcontacts2;import java.util.ArrayList;import java.util.List;import android.annotation.SuppressLint;import android.app.AlertDialog;import android.app.Fragment;import android.content.DialogInterface;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.text.Editable;import android.text.TextUtils;import android.text.TextWatcher;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.AdapterView.OnItemLongClickListener;import android.widget.ListView;import android.widget.TextView;import com.huang.readsystemcontacts.R;import com.huang.readsystemcontacts.adpter.SortAdapter;import com.huang.readsystemcontacts.bean.Contactbean;import com.huang.readsystemcontacts.dao.Contact;import com.huang.readsystemcontacts.view.ClearEditText;import com.huang.readsystemcontacts.view.SideBar;import com.huang.readsystemcontacts.view.SideBar.OnTouchingLetterChangedListener;import com.huang.readsystemcontacts2.util.CharacterParser;import com.huang.readsystemcontacts2.util.ContactSort;public class AddressFragment extends Fragment {    private ListView mlistView;    private Contact contact;    private List<Contactbean> contacts;    private SideBar sideBar;    private Contactbean contactbean;    private SortAdapter adapter;    // private MyAddressAdapter adapter;    private View view;    private TextView dialog;    private ClearEditText mClearEditText;    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,            Bundle savedInstanceState) {        return inflater.inflate(R.layout.address_frament, null);    }    @SuppressLint("NewApi")    @Override    public void onViewCreated(View view, Bundle savedInstanceState) {        super.onViewCreated(view, savedInstanceState);        this.view = view;        // 初始化控件        initView();        // 初始化数据        initData();        mClearEditText.addTextChangedListener(new TextWatcher() {            public void onTextChanged(CharSequence s, int start, int before,                    int count) {                filterData(s.toString());            }            public void beforeTextChanged(CharSequence s, int start, int count,                    int after) {                // TODO Auto-generated method stub            }            public void afterTextChanged(Editable s) {                // TODO Auto-generated method stub            }        });        // 设置右侧触摸监听        sideBar.setOnTouchingLetterChangedListener(new OnTouchingLetterChangedListener() {            public void onTouchingLetterChanged(String s) {                // 该字母首次出现的位置                int position = adapter.getPositionForSection(s.charAt(0));                if (position != -1) {                    mlistView.setSelection(position);                }            }        });        mlistView.setOnItemClickListener(new OnItemClickListener() {            public void onItemClick(AdapterView<?> parent, View view,                    int position, long id) {                Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"                        + contacts.get(position).getNumber()));                startActivity(intent);            }        });        // 设置ListView条目的点击事件        mlistView.setOnItemLongClickListener(new OnItemLongClickListener() {            public boolean onItemLongClick(AdapterView<?> parent, View view,                    final int position, long id) {                // 弹出一个对话框                AlertDialog.Builder builder = new AlertDialog.Builder(                        getActivity());                contactbean = contacts.get(position);                // 设置选项框的标题                builder.setTitle(contactbean.getName() + "\n"                        + contactbean.getNumber());                // 设置对话框的条目                builder.setItems(R.array.thread_menu,                        new DialogInterface.OnClickListener() {                            public void onClick(DialogInterface dialog,                                    int which) {                                Intent intent;                                switch (which) {                                case 0:                                    // 呼叫联系人                                    intent = new Intent(Intent.ACTION_CALL, Uri                                            .parse("tel:"                                                    + contactbean.getNumber()));                                    startActivity(intent);                                    break;                                case 1:                                    // 向联系人发送短信                                    intent = new Intent(Intent.ACTION_VIEW);                                    intent.putExtra("address",                                            contactbean.getNumber());                                    intent.putExtra("sms_body", "");                                    intent.setType("vnd.android-dir/mms-sms");                                    getActivity().startActivity(intent);                                    break;                                case 2:                                    // 发送联系人名字 和号码                                    intent = new Intent();                                    intent.setAction("android.intent.action.SEND");                                    intent.addCategory(Intent.CATEGORY_DEFAULT);                                    intent.setType("text/plain");                                    intent.putExtra(Intent.EXTRA_TEXT, "姓名::"                                            + contactbean.getName() + "\n"                                            + "号码:" + contactbean.getNumber());                                    startActivity(intent);                                    break;                                case 3:                                    String name = contactbean.getName();                                    String number = contactbean.getNumber();                                    String[] info = new String[] { name, number };                                    intent = new Intent(getActivity(),                                            ContactDetails.class);                                    Bundle bundle = new Bundle();                                    bundle.putStringArray("info", info);                                    intent.putExtras(bundle);                                    startActivity(intent);                                    break;                                case 4:                                    // 发送邮件                                    intent = new Intent(                                            android.content.Intent.ACTION_SEND);                                    // 文本格式                                    intent.setType("text/plain");                                    // 对方邮件地址                                    intent.putExtra(                                            android.content.Intent.EXTRA_EMAIL,                                            "");                                    // 标题内容                                    intent.putExtra(                                            android.content.Intent.EXTRA_SUBJECT,                                            "");                                    // 邮件文本内容                                    intent.putExtra(                                            android.content.Intent.EXTRA_TEXT,                                            "");                                    getActivity().startActivity(                                            Intent.createChooser(intent,                                                    "Choose Email Client"));                                    break;                                case 5:                                    // 删除联系人                                    Contact contact = new Contact();                                    contact.deleteContact(getActivity(),                                            contactbean.getId());                                    contacts.remove(position);// 移除已经删除的联系人条目                                    adapter.notifyDataSetChanged();// 通知适配器删除条目                                    break;                                }                            }                        });                builder.show();                return true;            }        });    }    /**     * 初始化控件     */    private void initView() {        sideBar = (SideBar) view.findViewById(R.id.sidrbar);        dialog = (TextView) view.findViewById(R.id.dialog);        sideBar.setTextView(dialog);        mClearEditText = (ClearEditText) view.findViewById(R.id.filter_edit);        mlistView = (ListView) view.findViewById(R.id.address_list_view);    }    /**     * 数据初始化     */    private void initData() {        contact = new Contact();        contactbean = new Contactbean();        contacts = new ArrayList<Contactbean>();        contacts = contact.contact(getActivity());        ContactSort.sortList(contacts, "selectPinyin", "ASC");        adapter = new SortAdapter(getActivity(), contacts);        mlistView.setAdapter(adapter);    }   }

package com.huang.readsystemcontacts.adpter;

import java.util.List;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.SectionIndexer;
import android.widget.TextView;

import com.huang.readsystemcontacts.R;
import com.huang.readsystemcontacts.bean.Contactbean;

public class SortAdapter extends BaseAdapter implements SectionIndexer{
private List contacts = null;
private Context mContext;

public SortAdapter(Context mContext, List<Contactbean> contacts ) {    this.mContext = mContext;    this.contacts  = contacts ;}public int getCount() {    return this.contacts.size();}public Object getItem(int position) {    return this.contacts.get(position);}public long getItemId(int position) {    return position;}public View getView(final int position, View view, ViewGroup arg2) {    ViewHolder viewHolder = null;    final Contactbean contactbean = contacts.get(position);    if (view == null) {        viewHolder = new ViewHolder();        view = LayoutInflater.from(mContext).inflate(R.layout.listview_item, null);        viewHolder.tvname = (TextView) view.findViewById(R.id.tv_name);        viewHolder.tvLetter = (TextView) view.findViewById(R.id.address_catalog);        viewHolder .tv_number  = (TextView) view.findViewById(R.id.tv_number);        viewHolder.photo = (ImageView) view.findViewById(R.id.id_photo);        view.setTag(viewHolder);    } else {        viewHolder = (ViewHolder) view.getTag();    }       viewHolder.tv_name.setText(this.contacts.get(position).getName());    viewHolder.tv_number.setText(this.contacts.get(position).getNumber());    if(contacts.get(position).getPhone()!=null){        viewHolder.photo.setImageBitmap(contacts.get(position).getPhone());    }    else{        Bitmap photo = BitmapFactory.decodeResource(mContext.getResources(),R.drawable.buddy_7_mb5ucom);        viewHolder.photo.setImageBitmap(photo);    }    return view;}final static class ViewHolder {    TextView tvname;    TextView tv_number;    ImageView photo;}

listView的item

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="vertical" >    <TextView        android:id="@+id/address_catalog"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:background="#E0E0E0"        android:textColor="#454545"        android:layout_weight="1.0"        android:paddingLeft="5dip"        android:paddingTop="5dip"        android:paddingBottom="5dip"        android:text="A"/>    <RelativeLayout        android:id="@+id/id_relativelayout"        android:layout_width="fill_parent"        android:layout_height="60dp" >        <LinearLayout            android:id="@+id/id_linearlayout"            android:layout_width="fill_parent"            android:layout_height="60dp"            android:orientation="horizontal" >            <ImageView                android:id="@+id/id_photo"                android:layout_width="50dp"                android:layout_height="50dp"                android:layout_gravity="center_vertical"                android:layout_marginLeft="5dp"                android:src="@drawable/iconfont_bohao" />            <RelativeLayout                android:id="@+id/id_relativelayout_1"                android:layout_width="fill_parent"                android:layout_height="60dp"                android:layout_marginLeft="10dp"                android:layout_weight="1" >                <TextView                    android:id="@+id/tv_name"                    android:layout_width="wrap_content"                    android:layout_height="30dp"                    android:gravity="center_vertical"                    android:text="名字"                    android:textColor="#000000"                    android:textSize="16sp" />                <TextView                    android:id="@+id/tv_number"                    android:layout_width="wrap_content"                    android:layout_height="30dp"                    android:layout_below="@id/tv_name"                    android:gravity="center_vertical"                    android:hint="电话号码:"                    android:paddingLeft="10dp"                    android:textColor="#43000000"                    android:textSize="14sp" />            </RelativeLayout>        </LinearLayout>    </RelativeLayout></LinearLayout>

在MainActivity中把Fragment实例化,拿到FragmentManager fm;
//Fragment的管理器
fm = getFragmentManager();
//拿到开启事物的FragmentTransaction的对象
ft = fm.beginTransaction();
ft.replace(R.id.context, new CallKeyFragment());
ft.commit();

package com.huang.readsystemcontacts2;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.List;import android.annotation.SuppressLint;import android.app.FragmentManager;import android.app.FragmentTransaction;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.support.v4.app.FragmentActivity;import android.view.KeyEvent;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.widget.Toast;import com.huang.readsystemcontacts.R;import com.huang.readsystemcontacts.view.ChangeText;public class MainActivity extends FragmentActivity implements OnClickListener {    private static final int APPEXIT = 1;    private List<ChangeText> mTabIndicators ;    private FragmentManager fm;    private FragmentTransaction ft;     private ChangeText one ,two,three,four;    private boolean isAppExit;    private String tag ="0";    @SuppressLint("NewApi")    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //设置不显示导航栏图标        getActionBar().setDisplayShowHomeEnabled(false);            initVew();              initData();    }       /**     * 初始化数据     */    private void initData() {        mTabIndicators = new ArrayList<ChangeText>();        /*将自定义ChangeText的对象 one ,two,three,        four添加到List<ChangeText> mTabIndicators集合中        */        mTabIndicators.add(one);        mTabIndicators.add(two);        mTabIndicators.add(three);        mTabIndicators.add(four);        //设置自定义ChangeText对象 one ,two,three,four的点击事件        one.setOnClickListener(this);        two.setOnClickListener(this);        three.setOnClickListener(this);        four.setOnClickListener(this);        one.setIconAlpha(1.0f);        //Fragment的管理器        fm = getFragmentManager();        //拿到开启事物的FragmentTransaction的对象        ft = fm.beginTransaction();        ft.replace(R.id.context, new CallKeyFragment());        ft.commit();            }    /**     * 初始化控件     */    private void initVew() {                 one = (ChangeText) findViewById(R.id.id_indicator_one);             two = (ChangeText) findViewById(R.id.id_indicator_two);             three = (ChangeText) findViewById(R.id.id_indicator_third);             four = (ChangeText) findViewById(R.id.id_indicator_fort);       }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.main, menu);              return super.onCreateOptionsMenu(menu);    }    /**     * 设置菜单的图标显示     */    @Override    public boolean onMenuOpened(int featureId, Menu menu) {        if (featureId == Window.FEATURE_ACTION_BAR && menu != null)        {            if (menu.getClass().getSimpleName().equals("MenuBuilder"))            {                try                {                    Method m = menu.getClass().getDeclaredMethod(                            "setOptionalIconsVisible", Boolean.TYPE);                    m.setAccessible(true);                    m.invoke(menu, true);                } catch (Exception e)                {                    e.printStackTrace();                }            }        }        return super.onMenuOpened(featureId, menu);    }    /**     * 菜单的选择事件     */    @Override    public boolean onOptionsItemSelected(MenuItem item) {        Intent intent;        switch (item.getItemId()) {        case R.id.share://分享界面            intent  = new Intent();            intent.setAction("android.intent.action.SEND");            intent.addCategory(Intent.CATEGORY_DEFAULT);            intent.setType("text/plain");            intent.putExtra(Intent.EXTRA_TEXT,"推荐您使用一款软件,名称为: "+getPackageName());            startActivity(intent);              break;        case R.id.add_contact://添加联系人界面            intent = new Intent(MainActivity.this, AddContact.class);            startActivity(intent);            break;        case R.id.setting://设置界面            intent = new Intent(MainActivity.this, SettingActivity.class);            startActivity(intent);            break;                  case R.id.scan://扫一扫界面            intent = new Intent(MainActivity.this, ScannerActivity.class);            startActivity(intent);            break;          }        return super.onOptionsItemSelected(item);    }    /**     * 点击事件     */    public void onClick(View v) {        clickTab(v);    }    /**     * 重置mTab颜色     */    private void resetOtherTab() {        for (int i = 0; i < mTabIndicators.size(); i++) {            mTabIndicators.get(i).setIconAlpha(0);        }    }       /**     *      * @param v     */    private void clickTab(View v) {        resetOtherTab();        switch (v.getId()) {        case R.id.id_indicator_one:            tag ="0";            mTabIndicators.get(0).setIconAlpha(1.0f);            ft = fm.beginTransaction();            ft.replace(R.id.context, new CallKeyFragment());            ft.commit();            break;        case R.id.id_indicator_two:            tag ="1";            mTabIndicators.get(1).setIconAlpha(1.0f);            ft = fm.beginTransaction();            ft.replace(R.id.context, new CallLogFragment());            ft.commit();            break;        case R.id.id_indicator_third:            tag ="2";            mTabIndicators.get(2).setIconAlpha(1.0f);            ft = fm.beginTransaction();            ft.replace(R.id.context, new AddressFragment());            ft.commit();            break;        case R.id.id_indicator_fort:            tag ="3";            mTabIndicators.get(3).setIconAlpha(1.0f);            ft = fm.beginTransaction();            ft.replace(R.id.context, new SmsFragment());            ft.commit();            break;        }    }       public boolean onKeyDown(int keyCode, KeyEvent event) {        if (keyCode == KeyEvent.KEYCODE_BACK) {            if (tag.equals("1") || tag.equals("2") || tag.equals("3")|| tag.equals("4")) {                resetOtherTab();                mTabIndicators.get(0).setIconAlpha(1.0f);                //Fragment的管理器                fm = getFragmentManager();                //拿到开启事物的FragmentTransaction的对象                ft = fm.beginTransaction();                ft.replace(R.id.context, new CallKeyFragment());                ft.commit();                tag="0";            } else if (tag.equals("0")) {                appExit();            }            return true;        }        return super.onKeyDown(keyCode, event);    }    /**     * 退出app     */    public void appExit() {        if (!isAppExit) {            isAppExit = true;            Toast.makeText(this, "再按一次,退出应用", Toast.LENGTH_SHORT).show();            handler.sendEmptyMessageDelayed(APPEXIT, 2000);        } else {            // 2s内再次按back时,isExit= true,执行以下操作,app退出            System.exit(0);        }    }    Handler handler = new Handler() {        public void handleMessage(android.os.Message msg) {            switch (msg.what) {            case APPEXIT:                isAppExit = false;                break;            default:                break;            }        };    };}
0 0
原创粉丝点击