个人简历工作地点的选择(Android开源项目)
来源:互联网 发布:标签设计软件免费版 编辑:程序博客网 时间:2024/04/29 13:49
当我们在找工作时,肯定要注册简历。简历在创建的时候会有工作地点的选择,如下图:
当往上拉时,”热门城市”会取代”当前城市”并且不消失。当点击”上海”时,还有更精确地地点可以选择
我在github上找到了相关的demo(https://github.com/beworker/pinned-section-listview),并且对其进行了实现。
首先定义一个实体类
/** * Listview对应的每个条目 */public class Item { public final static int ITEM = 0; public static final int SECTION = 1; /** listitem类型。SECTION大标题,ITEM小标题 */ public final int type; /** listitem文本内容 */ public final String text; /** listitem所在的SECTION */ public int sectionPosition; /** listitem在整个Listview中的位置 */ public int listPosition; /** 相对于某个section的位置 */ public int sectionlistPosition; public Item(int type, String text) { this.type = type; this.text = text; } @Override public String toString() { return text; }}
接下来是自定义的Listview
PinnedSectionListView.java
里面有英文注释,理解起来并不困难
然后是PinnedSectionListActivity,也是重点
首先定义了一个适配器
/** * 适配器 */ class SimpleAdapter extends ArrayAdapter<Item> implements PinnedSectionListAdapter { private final int[] COLORS = new int[] { R.color.green_light, R.color.orange_light, R.color.blue_light, R.color.red_light }; public SimpleAdapter(Context context, int resource, int textViewResourceId) { super(context, resource, textViewResourceId); generateDataset(); } /** * 生成数据集 */ public void generateDataset() { SQLiteDatabase db1 = SQLiteDatabase.openOrCreateDatabase(dst, null); Cursor cursor = db1.query("provinces", null, null, null, null, null, null); while (cursor.moveToNext()) { String pro = cursor.getString(cursor.getColumnIndex("name")); proset.add(pro); int ID = cursor.getInt(cursor.getColumnIndex("_id")) - 1; // -1是因为db文件里面数据的原因 proIDset.add(ID); } cursor.close(); db1.close(); int sectionPosition = 0, listPosition = 0; // 省份 sectionPosition = 0 Item section = new Item(Item.SECTION, "省份"); section.sectionPosition = sectionPosition; section.listPosition = listPosition++; add(section); final int itemsNumber = proset.size(); for (int j = 0; j < itemsNumber; j++) { Item item = new Item(Item.ITEM, proset.get(j)); item.sectionPosition = sectionPosition; item.listPosition = listPosition++; item.sectionlistPosition = j; add(item); } sectionPosition++; } @Override public View getView(int position, View convertView, ViewGroup parent) { TextView view = (TextView) super.getView(position, convertView, parent); view.setTextColor(Color.DKGRAY); view.setTag("" + position); Item item = getItem(position); if (item.type == Item.SECTION) { view.setBackgroundColor(parent.getResources().getColor( COLORS[item.sectionPosition % COLORS.length])); } return view; } @Override public int getViewTypeCount() { return 2; } @Override public int getItemViewType(int position) { return getItem(position).type; } @Override public boolean isItemViewTypePinned(int viewType) { return viewType == Item.SECTION; } }
这个适配器的功能就是从db中加载数据(generateDataset),并且通过getView显示出来。
然后是响应的onListItemClick
当点击的item属于省份,下面还有城市的话(例如江苏省),那么就加载一个listview显示城市。通过设置setVisibility来隐藏和显示
@Override protected void onListItemClick(ListView l, View v, int position, long id) { Item item = (Item) getListView().getAdapter().getItem(position); if (item.type == Item.ITEM) { Toast.makeText(this, "Item " + position + ": " + item.text, Toast.LENGTH_SHORT).show(); if (item.sectionPosition == 0) {// 属于"省份"的ITEM cityset.clear(); SQLiteDatabase db1 = SQLiteDatabase.openOrCreateDatabase(dst, null); // 注意这个province_id究竟应该等于哪个值 Cursor cursor = db1.query("citys", null, "province_id=" + item.sectionlistPosition, null, null, null, null); while (cursor.moveToNext()) { String city = cursor.getString(cursor .getColumnIndex("name")); if (!city.contains(".")) { cityset.add(city); } } cursor.close(); db1.close(); if (cityset.size() == 1) {// 直辖市 return; } // 非直辖市再加载一个listview显示 getListView().setVisibility(View.GONE); adapter = new ArrayAdapter<String>( PinnedSectionListActivity.this, android.R.layout.simple_list_item_1, cityset); listView.setAdapter(adapter); listView.setVisibility(View.VISIBLE); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText( PinnedSectionListActivity.this, "Item " + position + ": " + adapter.getItem(position), Toast.LENGTH_SHORT).show(); } }); Log.i("cityset", cityset.toString()); } } else { Toast.makeText(this, "Item " + position, Toast.LENGTH_SHORT).show(); } }
最后通过重写onBackPressed来进行两个listview的切换
@Override public void onBackPressed() { if (listView.getVisibility() == View.VISIBLE && getListView().getVisibility() == View.GONE) { listView.setVisibility(View.GONE); getListView().setVisibility(View.VISIBLE); } else if (listView.getVisibility() == View.GONE && getListView().getVisibility() == View.VISIBLE) { finish(); } }
我的代码地址:http://download.csdn.net/detail/lxj1137800599/9558528
0 0
- 个人简历工作地点的选择(Android开源项目)
- android:个人简历的三种布局(相对,线性,表格)
- Android:使用百度地图SDK定位当前具体位置(类似QQ发表说说的选择地点功能)
- C/C++工程师(工作地点:上海)
- 【M2M项目组】张颖鹏的个人简历
- 【M2M项目组】周华东的个人简历
- 【简历】项目管理讲师个人简历(系统集成)
- android开源项目_学习和工作的好朋友
- 上海买房地点选择
- Android上通过百度地图API实现选择城市/地点/距离/选择类型 来选择一定半径内的兴趣点
- 关于聚地地点的选择的讨论!
- 问题解决--实现仿微信多图选择的开源项目(MultiImageSelector)
- 开源项目选择
- 我的开源项目工作进展(1)
- 我的开源项目工作进展(2)
- 我的开源项目工作进展(3)
- 我的开源项目工作进展(4)
- 我的开源项目工作进展(6、7)
- mybatis注解方式的注意事项
- Jmeter+H2 Database动态部署JAR包到代理端
- MyBatis复习
- 欢迎使用CSDN-markdown编辑器
- [linux] 进度条
- 个人简历工作地点的选择(Android开源项目)
- 我的arm_linux移植笔记
- 服务端入门《四》(makefile)
- Python中集合(set)类型
- 网络请求工具类之OkHttp3封装(二)下(支持请求取消、异步请求的线程切换)
- 鼠标滑过放大不影响布局
- 【转载】Matlab中如何加载.mat变成矩阵形式
- Gitblit 服务器的搭建
- Nginx google 扩展