主要实现功能:

一、实现名单的中英文混合排序,按照联系人名单的首字母进行分类。

二、实现右侧的字母导航功能,根据字母定位相应的名单组,方便查找。

三、实现搜索功能(1)输入字母进行搜索时,按照精确查找(如查找张  输入z ;查找张三  输入zs)。

(2)输入汉字进行搜索时,按照相对模糊的查找(如输入“张”,即查找所有包含“张”字的名单,输入“张三”,即查找所有包含“张三”的名单)。

(3)输入其他字符串查找时,只根据第一个字符进行查询。

程序功能效果如下

代码结构:

MainActivity.java 主界面      MyAdapter.java重写一个adapter     Sort.java处理数据的类

activity_main.xml 主界面

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent" >
  5. <ListView
  6. android:id="@+id/listView1"
  7. android:layout_width="fill_parent"
  8. android:layout_height="fill_parent" >
  9. </ListView>
  10. <ImageView
  11. android:id="@+id/imageView1"
  12. android:layout_width="wrap_content"
  13. android:layout_height="fill_parent"
  14. android:layout_gravity="center_vertical|right"
  15. android:scaleType="center"
  16. android:src="@drawable/contact_list_scroll_normal" />
  17. </FrameLayout>

icon.xml当点击导航时,显示在屏幕中间的提示图标

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <TextView xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:background="@drawable/bg_hitchar"
  4. android:gravity="center"
  5. android:maxWidth="100dp"
  6. android:minWidth="100dp"
  7. android:padding="10dp"
  8. android:textColor="#ffffffff"
  9. android:textSize="70sp"
  10. android:visibility="invisible" />

list_item_tag.xml名单组的标题,即对应的首字母

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="wrap_content"
  5. android:background="#555555"
  6. android:paddingLeft="10dip">
  7. <TextView
  8. android:id="@+id/group_list_item_text"
  9. android:layout_width="wrap_content"
  10. android:layout_height="20dip"
  11. android:gravity="center_vertical"
  12. android:textColor="#ffffff" />
  13. </LinearLayout>

list_item.xml名单item

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="wrap_content"
  5. android:orientation="horizontal"
  6. android:padding="5dip" >
  7. <ImageView
  8. android:layout_width="50dp"
  9. android:layout_height="50dp"
  10. android:src="@drawable/list_addfriend_icon" />
  11. <TextView
  12. android:id="@+id/group_list_item_text"
  13. android:layout_width="wrap_content"
  14. android:layout_height="fill_parent"
  15. android:gravity="center_vertical"
  16. android:paddingLeft="5dip" />
  17. </LinearLayout>

search.xml搜索框

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <EditText xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/searchText"
  4. android:layout_width="fill_parent"
  5. android:layout_height="wrap_content"
  6. android:hint="@string/search_text" />

代码实现:

在初始化、设置监听、在主界面添加icon、把search添加进ListView之后,首先,调用Sort中的autoSort(String[])方法,对数据进行排序,然后使用排序后的String[]创建两个ArrayList,第一个ArrayList(newDataArrayList)调用Sort.addChar(String [])方法添加分组的字母,使用于ListView中。第二个ArrayList(checkArrayList)单纯的把排序后的String[]转换成ArrayList用于数据的搜索。 接着使用newDataArrayList创建MyAdapter对象,MyAdapter根据重写的getView方法生成ListView。当点击导航图片时,根据用户点击的位置判断出用户想要点击的字母,然后查找这个字母在newDataArrayList(即MyAda中的mObject)中的位置,使用ListView.setSelectionFromTop()方法把对应的分组字母显示在最上面。使用搜索功能时,判断输入字符串的是字母还是汉字,如果这个字符串都是字母,则每个字母匹配一次,不成功则从checkArrayList中remove掉。如果输入的全部为汉字,则使用String.contains()判断联系人名单包不包含搜索的字符,不包含则remove。在操作完成后的checkArrayList即为搜索到数据,然后通过MyAdapter用ListView现实出来

一、MainActivity.java

[java] view plaincopy
  1. package com.example.tongxunlu;
  2. import java.util.ArrayList;
  3. import android.app.Activity;
  4. import android.content.Context;
  5. import android.graphics.PixelFormat;
  6. import android.os.Bundle;
  7. import android.text.Editable;
  8. import android.text.TextWatcher;
  9. import android.view.GestureDetector;
  10. import android.view.GestureDetector.OnGestureListener;
  11. import android.view.MotionEvent;
  12. import android.view.View;
  13. import android.view.View.OnFocusChangeListener;
  14. import android.view.View.OnTouchListener;
  15. import android.view.ViewGroup.LayoutParams;
  16. import android.view.WindowManager;
  17. import android.widget.EditText;
  18. import android.widget.ImageView;
  19. import android.widget.ListView;
  20. import android.widget.TextView;
  21. public class MainActivity extends Activity implements OnTouchListener,
  22. OnGestureListener
  23. {
  24. private String searchStr = null;
  25. private Sort mSort = null;
  26. private Context mContext = null;
  27. private TextView mIcon = null;
  28. private MyAdapter mAdapter = null;
  29. private ListView mListView = null;
  30. private EditText mSearchText = null;
  31. private ImageView mImageView = null;
  32. private GestureDetector mGesture = null;
  33. private ArrayList<String> newDataArrayList;
  34. private ArrayList<String> checkArrayList;
  35. private String[] newData;
  36. private String[] english = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
  37. "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
  38. "W", "X", "Y", "Z"};
  39. private String[] oldData = {"一败如水", "胆小如鼠", "引狼入室", "风驰电掣", "刀山火海", "一贫如洗",
  40. "料事如神", "视死如归", "对答如流", "挥金如土", "铁证如山", "度日如年", "心急如焚", "巧舌如簧",
  41. "如雷贯耳", "如履薄冰", "如日中天", "势如破竹", "稳如泰山", "骨瘦如柴", "爱财如命", "暴跳如雷",
  42. "门庭若市", "恩重如山", "从善如流", "观者如云", "浩如烟海", "弃暗投明", "取长补短", "厚今薄古",
  43. "同甘共苦", "因小失大", "优胜劣败", "自生自灭", "评头论足", "远交近攻", "求同存异", "well",
  44. "hello", "one", "goodtime", "running", "java", "android", "jsp",
  45. "html", "struts", "Charles", "Mark", "Bill", "Vincent", "William",
  46. "Joseph", "James", "Henry", "Gary", "Martin"};
  47. @Override
  48. /**
  49. * 初始化、添加icon、search等view,设置监听
  50. */
  51. protected void onCreate(Bundle savedInstanceState)
  52. {
  53. super.onCreate(savedInstanceState);
  54. setContentView(R.layout.activity_main);
  55. mContext = MainActivity.this;
  56. mImageView = (ImageView) this.findViewById(R.id.imageView1);
  57. mListView = (ListView) this.findViewById(R.id.listView1);
  58. mSearchText = (EditText) this.getLayoutInflater().inflate(
  59. R.layout.search, null);
  60. mIcon = (TextView) this.getLayoutInflater()
  61. .inflate(R.layout.icon, null);
  62. mGesture = new GestureDetector(this);
  63. getWindowManager()
  64. .addView(
  65. mIcon,
  66. new WindowManager.LayoutParams(
  67. LayoutParams.WRAP_CONTENT,
  68. LayoutParams.WRAP_CONTENT,
  69. WindowManager.LayoutParams.TYPE_APPLICATION,
  70. WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
  71. | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
  72. PixelFormat.TRANSLUCENT));
  73. mSort = new Sort();
  74. checkArrayList = new ArrayList<String>();
  75. //得到排序后的数据(String[])
  76. newData = mSort.autoSort(oldData);
  77. newDataArrayList = mSort.addChar(newData);//
  78. mListView.addHeaderView(mSearchText);
  79. mAdapter = new MyAdapter(this, android.R.layout.simple_list_item_1,
  80. newDataArrayList);
  81. mListView.setAdapter(mAdapter);
  82. mListView.setOnTouchListener(new OnTouchListener()
  83. {
  84. @Override
  85. public boolean onTouch(View v, MotionEvent event)
  86. {
  87. // TODO Auto-generated method stub
  88. if(mSearchText.hasFocus())
  89. mSearchText.clearFocus();
  90. return false;
  91. }
  92. });
  93. //搜索框监听
  94. mSearchText.addTextChangedListener(new MyWatchToSearch());
  95. mImageView.setOnTouchListener(this);
  96. mImageView.setLongClickable(true);
  97. }
  98. class MyWatchToSearch implements TextWatcher
  99. {
  100. @Override
  101. public void beforeTextChanged(CharSequence s, int start, int count,
  102. int after)
  103. {
  104. // TODO Auto-generated method stub
  105. }
  106. @Override
  107. public void onTextChanged(CharSequence s, int start, int before,
  108. int count)
  109. {
  110. // TODO Auto-generated method stub
  111. //搜索功能只针对ListView中的内容数据,不针对标题数据。
  112. //使用没添加的分组字母的数据创建新的ArrayList
  113. checkArrayList = mSort.toArrayList(newData);
  114. searchStr = mSearchText.getText().toString();
  115. if (searchStr.length() != 0)
  116. {
  117. checkSearchStr(searchStr);
  118. mAdapter = new MyAdapter(mContext,
  119. android.R.layout.simple_list_item_1, checkArrayList);
  120. mListView.setAdapter(mAdapter);
  121. }
  122. }
  123. @Override
  124. public void afterTextChanged(Editable s)
  125. {
  126. // TODO Auto-generated method stub
  127. if (searchStr.length() == 0)
  128. {
  129. mAdapter = new MyAdapter(mContext,
  130. android.R.layout.simple_list_item_1, newDataArrayList);
  131. mListView.setAdapter(mAdapter);
  132. }
  133. mSearchText.requestFocus();
  134. }
  135. /**
  136. *
  137. */
  138. public void checkSearchStr(String search)
  139. {
  140. String tempSearch;
  141. String tempList;
  142. String newDataChar = null;
  143. String checkArrayListItem = null;
  144. //当输入的搜索字符为字母时
  145. if (search.matches("[a-zA-Z]+"))
  146. {
  147. for (int i = 0; i < search.length(); i++)
  148. {
  149. for (int j = 0; j < checkArrayList.size(); j++)
  150. {
  151. checkArrayListItem = checkArrayList.get(j);
  152. //如果联系人名称不为字母,则得到联系人名称的所有首字母
  153. if (!checkArrayListItem.matches("[a-zA-Z]+"))
  154. {
  155. newDataChar = mSort
  156. .getAllPinYinHeadChar(checkArrayListItem);
  157. }
  158. else
  159. {
  160. newDataChar = checkArrayListItem;
  161. }
  162. //取出输入的字符串的第i个字母,并转换为大写
  163. tempSearch = String.valueOf(search.charAt(i))
  164. .toUpperCase();
  165. //取出得到的联系人名称所有首字母的第i个字母,并转换为大写
  166. tempList = String.valueOf(newDataChar.charAt(i))
  167. .toUpperCase();
  168. if (!(tempSearch.equals(tempList)))
  169. {
  170. checkArrayList.remove(j);
  171. newDataChar = null;
  172. j--;
  173. }
  174. }
  175. }
  176. }
  177. //当输入的搜索字符为汉字时
  178. else if (search.matches("[\u4e00-\u9fa5]+"))
  179. {
  180. for (int j = 0; j < checkArrayList.size(); j++)
  181. {
  182. if (!checkArrayList.get(j).contains(search))
  183. {
  184. checkArrayList.remove(j);
  185. j--;
  186. }
  187. }
  188. }
  189. else
  190. {
  191. search = String.valueOf(search.charAt(0));
  192. for (int j = 0; j < checkArrayList.size(); j++)
  193. {
  194. if (!checkArrayList.get(j).contains(search))
  195. {
  196. checkArrayList.remove(j);
  197. j--;
  198. }
  199. }
  200. }
  201. }
  202. }
  203. @Override
  204. public boolean onTouch(View v, MotionEvent event)
  205. {
  206. // TODO Auto-generated method stub
  207. if(mSearchText.hasFocus())
  208. mSearchText.clearFocus();
  209. return mGesture.onTouchEvent(event);
  210. }
  211. @Override
  212. public boolean onDown(MotionEvent e)
  213. {
  214. // TODO Auto-generated method stub
  215. util(e);
  216. return false;
  217. }
  218. @Override
  219. public void onShowPress(MotionEvent e)
  220. {
  221. // TODO Auto-generated method stub
  222. }
  223. @Override
  224. public boolean onSingleTapUp(MotionEvent e)
  225. {
  226. // TODO Auto-generated method stub
  227. mImageView.setImageResource(R.drawable.contact_list_scroll_normal);
  228. mIcon.setVisibility(View.INVISIBLE);
  229. return false;
  230. }
  231. @Override
  232. public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
  233. float distanceY)
  234. {
  235. util(e2);
  236. // TODO Auto-generated method stub
  237. return false;
  238. }
  239. @Override
  240. public void onLongPress(MotionEvent e)
  241. {
  242. // TODO Auto-generated method stub
  243. mImageView.setImageResource(R.drawable.contact_list_scroll_normal);
  244. mIcon.setVisibility(View.INVISIBLE);
  245. }
  246. @Override
  247. public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
  248. float velocityY)
  249. {
  250. // TODO Auto-generated method stub
  251. mImageView.setImageResource(R.drawable.contact_list_scroll_normal);
  252. mIcon.setVisibility(View.INVISIBLE);
  253. return false;
  254. }
  255. public void util(MotionEvent e2)
  256. {
  257. //获取触摸点在导航图片中的位置
  258. int i = (int) (e2.getY() - mImageView.getTop());
  259. mImageView.setImageResource(R.drawable.contact_list_scroll_pressed);
  260. int pos;
  261. int count;
  262. if (0 <= i && i <= 30)
  263. {
  264. mIcon.setText("搜");
  265. mIcon.setVisibility(View.VISIBLE);
  266. mListView.setSelectionFromTop(0, 0);
  267. }
  268. else
  269. {
  270. count = (int) ((i - 31) / ((float) (mImageView.getHeight() - 62) / 26f));
  271. if (0 <= count && count < 26)
  272. {
  273. mIcon.setText(english[count]);
  274. mIcon.setVisibility(View.VISIBLE);
  275. pos = mAdapter.checkSection(english[count]) + 1;
  276. if (pos >= 0) mListView.setSelectionFromTop(pos, 0);
  277. }
  278. else
  279. {
  280. mIcon.setVisibility(View.VISIBLE);
  281. mIcon.setText("#");
  282. }
  283. }
  284. }
  285. }

二、Sort.java

[java] view plaincopy
  1. package com.example.tongxunlu;
  2. import java.util.ArrayList;
  3. import net.sourceforge.pinyin4j.PinyinHelper;
  4. public class Sort
  5. {
  6. /**中英文混合排序
  7. *
  8. * @param strArr 原始的通讯录名单
  9. * @return   排序后的通讯录名单
  10. */
  11. public String[] autoSort(String[] strArr)
  12. {
  13. String temp = "";
  14. String headchar1 ;
  15. String headchar2 ;
  16. for (int i = 0; i < strArr.length; i++)
  17. {
  18. for (int j = i; j < strArr.length; j++)
  19. {
  20. headchar1 =  getPinYinHeadChar(strArr[i]).toUpperCase();
  21. headchar2 =  getPinYinHeadChar(strArr[j]).toUpperCase();
  22. if (headchar1.charAt(0) > headchar2.charAt(0))
  23. {
  24. temp = strArr[i];
  25. strArr[i] = strArr[j];
  26. strArr[j] = temp;
  27. }
  28. }
  29. }
  30. return strArr;
  31. }
  32. /**得到当前联系人名称的的一个汉字的首字母
  33. *
  34. * @param str  联系人名称
  35. * @return 首字母
  36. */
  37. public String getPinYinHeadChar(String str)
  38. {
  39. String convert = "";
  40. char word = str.charAt(0);
  41. String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);
  42. if(pinyinArray!= null)
  43. convert = String .valueOf(pinyinArray[0].charAt(0));
  44. else {
  45. convert = String .valueOf(word);
  46. }
  47. return convert;
  48. }
  49. /**实现数据分组
  50. *
  51. * @param strArr 排序后的通讯录名单
  52. * @return  对数据添加了分组字母的ArrayList(如在所有首字母为B的名单组之前添加一个B实现分组)
  53. */
  54. public ArrayList<String> addChar(String[] strArr)
  55. {
  56. String headchar = "" ;
  57. ArrayList<String> list = new ArrayList<String>();
  58. int j= 0;
  59. for (int i = 0; i < strArr.length; i++)
  60. {
  61. headchar = String.valueOf(getPinYinHeadChar(strArr[i]).charAt(0)).toUpperCase();
  62. if(!list.contains(headchar))
  63. {
  64. list.add(headchar);
  65. list.add(strArr[i]);
  66. }
  67. else {
  68. list.add(strArr[i]);
  69. }
  70. }
  71. return list;
  72. }
  73. public ArrayList<String> toArrayList(String[] str)
  74. {
  75. ArrayList<String> arrayList = new ArrayList<String>();
  76. for(int i = 0; i<str.length;i++)
  77. arrayList.add(str[i]);
  78. return arrayList;
  79. }
  80. /**
  81. *
  82. * @param str联系人名称
  83. * @return 联系人名称中每个汉字的首字母
  84. */
  85. public String getAllPinYinHeadChar(String str) {
  86. String convert = "";
  87. for (int j = 0; j < str.length(); j++) {
  88. char word = str.charAt(j);
  89. String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);
  90. if (pinyinArray != null) {
  91. convert += pinyinArray[0].charAt(0);
  92. }else {
  93. convert += word;
  94. }
  95. }
  96. return convert;
  97. }
  98. }

三、MyAdapter.java

[java] view plaincopy
  1. package com.example.tongxunlu;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import android.content.Context;
  5. import android.view.LayoutInflater;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import android.widget.ArrayAdapter;
  9. import android.widget.TextView;
  10. public class MyAdapter extends ArrayAdapter<String>
  11. {
  12. public String[] sections;
  13. public ArrayList<String> mObject;
  14. public HashMap<String, Integer> alphaIndexer;
  15. private View view = null;
  16. private TextView tView = null;
  17. private ArrayList<String> arrayList = new ArrayList<String>();
  18. private String[] english = {"A", "B", "C", "D", "E", "F", "G", "H", "I",
  19. "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
  20. "W", "X", "Y", "Z"};
  21. public MyAdapter(Context context, int textViewResourceId,
  22. ArrayList<String> objects)
  23. {
  24. super(context, textViewResourceId, objects);
  25. // TODO Auto-generated constructor stub
  26. initArrayList();
  27. mObject = objects;
  28. }
  29. @Override
  30. /**
  31. * 添加item时判断,如果读取到的数据可以在arrayList中找到(即大写的单独字母),则添加为标题,否则是内容
  32. *
  33. */
  34. public View getView(int position, View convertView, ViewGroup parent)
  35. {
  36. // TODO Auto-generated method stub
  37. if (arrayList.contains(getItem(position)))
  38. {
  39. view = LayoutInflater.from(getContext()).inflate(
  40. R.layout.list_item_tag, null);
  41. }
  42. else
  43. {
  44. view = LayoutInflater.from(getContext()).inflate(
  45. R.layout.list_item, null);
  46. }
  47. tView = (TextView) view
  48. .findViewById(R.id.group_list_item_text);
  49. tView.setText(getItem(position));
  50. return view;
  51. }
  52. /**
  53. * 根据字母导航所点击的字母,锁定名单中对应标题的位置
  54. * @param str  所点击的字母
  55. * @return     返回字母在数据源中的位置。
  56. */
  57. public int checkSection(String str)
  58. {
  59. for (int i = 0; i < mObject.size(); i++)
  60. {
  61. if (mObject.get(i).equals(str))
  62. return i;
  63. }
  64. return -1;
  65. }
  66. /**
  67. * 讲26字母添加进list中,方便getView判断
  68. */
  69. public void initArrayList()
  70. {
  71. for (int i = 0; i < english.length; i++)
  72. arrayList.add(english[i]);
  73. }
  74. }

android通讯录开发(粗糙实现微信通讯录的功能)相关推荐

  1. android微信风格,Android开发实现模仿微信小窗口功能【Dialog对话框风格窗口】

    本文实例讲述了Android开发实现模仿微信小窗口功能.分享给大家供大家参考,具体如下: 运用方法: 将显示窗口的风格 设置为对话框风格即可 具体效果: 具体实现: 首先我们先定义布局文件: andr ...

  2. Android微信通讯录界面代码,Android中使用Expandablelistview实现微信通讯录界面

    之前的博文<Android 中使用ExpandableListView 实现分组的实例>我简单介绍了使用ExpandableListView实现简单的好友分组功能,今天我们针对之前的所做的 ...

  3. Android中使用ExpandableListView实现微信通讯录界面(完善仿微信APP)

    之前的博文<Android中使用ExpandableListView实现好友分组>我简单介绍了使用ExpandableListView实现简单的好友分组功能,今天我们针对之前的所做的仿微信 ...

  4. 【Android 应用开发】Android 无障碍开发简介 ( Android 无障碍开发辅助技术 | 启用 TalkBack 无障碍功能 | TalkBack 无障碍开发 示例 )

    文章目录 一.Android 无障碍开发辅助技术 二.启用 TalkBack 无障碍功能 三.TalkBack 无障碍功能代码示例 官方文档 : Android 无障碍功能概览 一.Android 无 ...

  5. android应用开发-从设计到实现 1-2 功能的确定

    功能的确定 产品的功能并不是在确定了产品之后才开始考虑的,功能与创意选择其实是一个"你中有我,我中有你"的关系.为了体现产品设计的阶段性,我才将它单独提出来分析. 这里讨论的产品功 ...

  6. android 字母索引三方,Android ListView字母索引(仿微信通讯录列表)

    布局代码 xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_paren ...

  7. Android 混合开发之仿微信朋友圈

    开发之前 大约从去年开始吧, 也可能是前年 Html5好像火得不得了, 不得了-总能从网上听说到 XXX混合开发, 为了紧跟潮流(虽然有点儿晚了), 咱们也看看Android+Html5混合开发是怎样 ...

  8. 李长军android语音开发_Android模仿微信录音、发送语音效果实现

    在项目开发中,有个需求:实现模仿微信录音,发送语音的功能.长按按钮录音,弹框显示语音时间,以及上滑取消发送.我重写了一个发送语音的控件,以实现该功能. 首先添加权限: AudioRecorderBut ...

  9. 通讯录搜索排序 类似微信通讯录

    点我打开Demo传送之门 1.排序分组 2.分组折叠展开,且记录每次每组的折叠情况,重启后以最后一次为准 3.添加和删除,拖动排序 4.搜索功能 点我打开Demo传送之门 欢迎扫描下方二维码关注--i ...

最新文章

  1. 腾讯机器人实验室首曝光 攻坚“通用人工智能”
  2. Solidity合约记录——(三)如何在合约中对操作进行权限控制
  3. sql server 常用函数
  4. java需要前台封装对象吗_javaEE之-----------类反射直接封装前台传过来的参数
  5. Layabox 常用操作
  6. Team Up!用Visual Studio 2005 Team System组织所有的装备 --作者:Chris Menage
  7. PHP基本语法(实例)
  8. wps图表xy轴颠倒_用EXCEL来搞艺术之图表类型变换
  9. Spring MVC 3.0 返回JSON数据的方法
  10. 关于ORACLE通过file_id与block_id定位数据库对象遇到的问题的一点思考
  11. javascript函数执行前期变量环境初始化过程
  12. 我靠这个数据分析利器,3年当上运营主管
  13. 执行php程序的时候,报错Allowed memory size of 134217728 bytes exhausted (tried to allocate 83 bytes)...
  14. Android 耳机插入过程分析 (AudioManager部分)
  15. 手机计算机快速切换功能,电脑页面切换快捷键
  16. Worldclim网站CIMP6未来数据下载(校正处理好的数据)
  17. 计算机病毒与防护学生反思,计算机病毒与防治教学反思
  18. linux手机E680的几个概念
  19. vue 2.0使用tinymce-vue富文本
  20. stm32f103c8t6+ESP8266利用onenet平台上传数据到云平台,再利用云平台远程下发命令给单片机控制LED灯亮灭

热门文章

  1. codeforces round#517
  2. 为CentOS 6、7升级gcc至4.8、4.9、5.2、6.3、7.3等高版本
  3. 读《一个程序员的奋斗史》有感
  4. Visual Studio 许可证已过期
  5. NC23053月月查华华的手机
  6. 基于 SSR 的预渲染首屏直出方案
  7. mysql 1005是什么意思_mysql提示1005
  8. uniapp微信小程序拨打电话功能
  9. 研究B站视频编号含义 - av | ep | md ...
  10. 服务器主板四路SLI时候出现的问题