通讯录之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; } }; };}
- 通讯录之FragMent的应用实列
- Fragment的运用实列
- 44通讯录Fragment的实现
- IOS学习之——通讯录的应用
- 40通讯录Fragment对应的布局
- ViewPager,ActionBar,Fragment应用--模仿通讯录滑动效果
- ViewPager,ActionBar,Fragment应用--模仿通讯录滑动效果
- ViewPager,ActionBar,Fragment应用--模仿通讯录滑动效果
- C++标准库---set应用之通讯录
- IOS通讯录开发<2> 通讯录的获取及应用
- ViewPager,ActionBar,Fragment--通讯录
- Fragment应用的介绍
- Fragment应用的介绍
- Fragment的相关应用
- Fragment的应用
- Fragment的基本应用
- Fragment的应用知识点
- Fragment的基本应用
- leetcode——165—— Compare Version Numbers
- 在hw的这一年
- PHP5.3以上版本安装ZendOptimizer扩展
- C++作业2
- 杂文 职业思考
- 通讯录之FragMent的应用实列
- 3月31日学习笔记(6.0版本用Broadcast实现强制下线功能问题)
- Linux_ mkfifo 命名管道 操作
- 触发器是怎么用的
- 推荐一门“神经网络”相关的视频课程
- bzoj 3339: Rmq Problem
- 树莓派motion摄像头监控并将图片上传百度云盘
- linux下常用命令
- Android Studio Jni环境配置 - 记录