前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >个人简历工作地点的选择(Android开源项目)

个人简历工作地点的选择(Android开源项目)

作者头像
提莫队长
发布2019-02-21 11:26:47
9720
发布2019-02-21 11:26:47
举报
文章被收录于专栏:刘晓杰刘晓杰

当我们在找工作时,肯定要注册简历。简历在创建的时候会有工作地点的选择,如下图:

这里写图片描述
这里写图片描述

当往上拉时,”热门城市”会取代”当前城市”并且不消失。当点击”上海”时,还有更精确地地点可以选择

这里写图片描述
这里写图片描述

我在github上找到了相关的demo(https://github.com/beworker/pinned-section-listview),并且对其进行了实现。

首先定义一个实体类

代码语言:javascript
复制
/**
 * 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,也是重点 首先定义了一个适配器

代码语言:javascript
复制
/**
     * 适配器
     */
    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来隐藏和显示

代码语言:javascript
复制
    @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的切换

代码语言:javascript
复制
    @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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年06月24日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档