package com.yueniuwang.yueniu.ui.stock.fragment;import android.content.Intent;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.text.TextUtils;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.ImageButton;import android.widget.ListView;import android.widget.TextView;import com.yueniuwang.yueniu.Config;import com.yueniuwang.yueniu.MainActivity;import com.yueniuwang.yueniu.R;import com.yueniuwang.yueniu.commen.LazyPtrFragment;import com.yueniuwang.yueniu.datamanager.TokenManager;import com.yueniuwang.yueniu.eventmodel.OpChangedEvent;import com.yueniuwang.yueniu.httpresoponse.AddOpStockResponse;import com.yueniuwang.yueniu.httpresoponse.NormalResponse;import com.yueniuwang.yueniu.net.WebService;import com.yueniuwang.yueniu.httprequest.TokenRequest;import com.yueniuwang.yueniu.httprequest.UpdataOptionStockRequest;import com.yueniuwang.yueniu.rxfunction.CompletedAction0;import com.yueniuwang.yueniu.rxfunction.FlatMapFunc1;import com.yueniuwang.yueniu.rxfunction.ThrowableAction1;import com.yueniuwang.yueniu.ui.commen.activity.SearchActivity;import com.yueniuwang.yueniu.ui.stock.activity.EditOptionStockActivity;import com.yueniuwang.yueniu.ui.stock.activity.StockStateDetailsActivity;import com.yueniuwang.yueniu.ui.user.activity.UserLoginActivity;import com.yueniuwang.yueniu.utils.PackParamsUtils;import com.yueniuwang.yueniu.utils.ToastUtils;import com.yueniuwang.yueniu.widget.NetProgressView;import com.yueniuwang.yueniu.widget.ptrui.PtrClassicFrameLayout;import org.greenrobot.eventbus.EventBus;import org.greenrobot.eventbus.Subscribe;import java.io.Serializable;import java.text.DecimalFormat;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;import rx.android.schedulers.AndroidSchedulers;import rx.functions.Action1;import rx.schedulers.Schedulers;public class OptionalFragment extends LazyPtrFragment {    public ListView listView;    public PtrClassicFrameLayout ptrLayout;    private NetProgressView netProgressView;    private View contentView;    private TextView rbEdit;    private TextView cancelSort;    private ImageButton ib_search;    private TextView textPrice;    private TextView textPercent;    private View login;    private View addStock;    private OptionalStockAdapter optionalStockAdapter;    private List datas = new ArrayList<>();    private List originDatas = new ArrayList<>();    int priceSortTag = 0;//价格排序    int percentSortTag = 0;//涨点幅排序    private static final int OPTIONAL_FRAG = 1;    private static final String OP_STOCK = "opstock";    private TokenTag tokenTag = TokenTag.DEFAULT;    private enum TokenTag {//在没有token时,从其他界面的登录回到次界面要刷新数据        DEFAULT, NO_TOKEN    }    /**     * 编辑点击事件     */    private View.OnClickListener EditOnClickListener = new View.OnClickListener() {        @Override        public void onClick(View v) {            Bundle bundle = new Bundle();            bundle.putSerializable(OP_STOCK, (Serializable) originDatas);            Intent intent = new Intent(getActivity(), EditOptionStockActivity.class);            intent.putExtras(bundle);            startActivityForResult(intent, OPTIONAL_FRAG);        }    };    /**     * 取消排序点击事件     */    private View.OnClickListener cancelSortOnClickListener = new View.OnClickListener() {        @Override        public void onClick(View v) {            clearSort();            restoreArrorw();            rbEdit.setVisibility(View.VISIBLE);            cancelSort.setVisibility(View.GONE);            priceSortTag = 0;            percentSortTag = 0;        }    };    /**     * 搜索点击事件     */    private View.OnClickListener searchOnClickListener = new View.OnClickListener() {        @Override        public void onClick(View v) {//            clearBackground();            SearchActivity.startSearchActivity(getActivity(), Config.SEARCHFLAG);        }    };    /**     * 降序排列价格     */    private Comparator descSort = new Comparator() {        @Override        public int compare(AddOpStockResponse.DataBean lhs, AddOpStockResponse.DataBean rhs) {            double price1 = Double.parseDouble(lhs.getPrice());            double price2 = Double.parseDouble(rhs.getPrice());            if (price2 > price1) {                return 1;            } else if (price2 < price1) {                return -1;            } else {                return 0;            }        }    };    /**     * 升序排列价格     */    private Comparator asccSort = new Comparator() {        @Override        public int compare(AddOpStockResponse.DataBean lhs, AddOpStockResponse.DataBean rhs) {            double price1 = Double.parseDouble(lhs.getPrice());            double price2 = Double.parseDouble(rhs.getPrice());            if (price2 > price1) {                return -1;            } else if (price2 < price1) {                return 1;            } else {                return 0;            }        }    };    /**     * 降序排列跌幅比     */    private Comparator descPercent = new Comparator() {        @Override        public int compare(AddOpStockResponse.DataBean lhs, AddOpStockResponse.DataBean rhs) {            double percent1 = Double.parseDouble(lhs.getPercent());            double percent2 = Double.parseDouble(rhs.getPercent());            if (percent1 > percent2) {                return -1;            } else if (percent1 < percent2) {                return 1;            } else {                return 0;            }        }    };    /**     * 升序排列跌幅比     */    private Comparator ascPercent = new Comparator() {        @Override        public int compare(AddOpStockResponse.DataBean lhs, AddOpStockResponse.DataBean rhs) {            double percent1 = Double.parseDouble(lhs.getPercent());            double percent2 = Double.parseDouble(rhs.getPercent());            if (percent1 > percent2) {                return 1;            } else if (percent1 < percent2) {                return -1;            } else {                return 0;            }        }    };    @Override    protected void initLoadData() {        getdata();    }    @Override    protected PtrClassicFrameLayout initPtrLayout() {        return ptrLayout;    }    @Override    protected void startRefresh() {        getdata();    }    @Override    protected NetProgressView getNetProgressView() {        return netProgressView;    }    @Override    protected View getContentView() {        return contentView;    }    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.fragment_optional, null);        EventBus.getDefault().register(this);        initView(view);        return view;    }    private void initView(View view) {        contentView = view.findViewById(R.id.content_view);        ptrLayout = (PtrClassicFrameLayout) view.findViewById(R.id.ptr_layout);        netProgressView = (NetProgressView) view.findViewById(R.id.net_progress_view);        textPrice = (TextView) view.findViewById(R.id.switch_price);        textPercent = (TextView) view.findViewById(R.id.switch_percent);        listView = (ListView) view.findViewById(R.id.optional_listView);        login = view.findViewById(R.id.login);        addStock = view.findViewById(R.id.add_stock);        //处理排序开关        view.findViewById(R.id.fl_switch_price).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                restoreArrorw();                percentSortTag = 0;                switch (priceSortTag) {                    case 0:                        Drawable drawable = getResources().getDrawable(R.drawable.ic_arrow_down_black_18dp);                        drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());                        textPrice.setCompoundDrawables(null, null, drawable, null);                        Collections.sort(datas, descSort);                        if (optionalStockAdapter != null) {                            optionalStockAdapter.notifyDataSetChanged();                        }                        priceSortTag = 1;                        rbEdit.setVisibility(View.GONE);                        cancelSort.setVisibility(View.VISIBLE);                        break;                    case 1:                        Drawable drawableup = getResources().getDrawable(R.drawable.ic_arrow_up_black_18dp);                        drawableup.setBounds(0, 0, drawableup.getMinimumWidth(), drawableup.getMinimumHeight());                        textPrice.setCompoundDrawables(null, null, drawableup, null);                        Collections.sort(datas, asccSort);                        if (optionalStockAdapter != null) {                            optionalStockAdapter.notifyDataSetChanged();                        }                        priceSortTag = 2;                        break;                    case 2:                        Drawable drawabledown = getResources().getDrawable(R.drawable.ic_arrow_bottom_right_black_18dp);                        drawabledown.setBounds(0, 0, drawabledown.getMinimumWidth(), drawabledown.getMinimumHeight());                        textPrice.setCompoundDrawables(null, null, drawabledown, null);                        datas.clear();                        for (AddOpStockResponse.DataBean bean : originDatas) {                            datas.add(bean);                        }                        if (optionalStockAdapter != null) {                            optionalStockAdapter.notifyDataSetChanged();                        }                        priceSortTag = 0;                        rbEdit.setVisibility(View.VISIBLE);                        cancelSort.setVisibility(View.GONE);                        break;                    default:                        break;                }            }        });        view.findViewById(R.id.fl_switch_percent).setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                restoreArrorw();                priceSortTag = 0;                switch (percentSortTag) {                    case 0:                        Drawable drawable = getResources().getDrawable(R.drawable.ic_arrow_down_black_18dp);                        drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());                        textPercent.setCompoundDrawables(null, null, drawable, null);                        Collections.sort(datas, descPercent);                        if (optionalStockAdapter != null) {                            optionalStockAdapter.notifyDataSetChanged();                        }                        percentSortTag = 1;                        rbEdit.setVisibility(View.GONE);                        cancelSort.setVisibility(View.VISIBLE);                        break;                    case 1:                        Drawable drawableup = getResources().getDrawable(R.drawable.ic_arrow_up_black_18dp);                        drawableup.setBounds(0, 0, drawableup.getMinimumWidth(), drawableup.getMinimumHeight());                        textPercent.setCompoundDrawables(null, null, drawableup, null);                        Collections.sort(datas, ascPercent);                        if (optionalStockAdapter != null) {                            optionalStockAdapter.notifyDataSetChanged();                        }                        percentSortTag = 2;                        break;                    case 2:                        Drawable drawabledown = getResources().getDrawable(R.drawable.ic_arrow_bottom_right_black_18dp);                        drawabledown.setBounds(0, 0, drawabledown.getMinimumWidth(), drawabledown.getMinimumHeight());                        textPercent.setCompoundDrawables(null, null, drawabledown, null);                        datas.clear();                        for (AddOpStockResponse.DataBean bean : originDatas) {                            datas.add(bean);                        }                        if (optionalStockAdapter != null) {                            optionalStockAdapter.notifyDataSetChanged();                        }                        percentSortTag = 0;                        rbEdit.setVisibility(View.VISIBLE);                        cancelSort.setVisibility(View.GONE);                        break;                    default:                        break;                }            }        });        //点击添加自选股/        addStock.setOnClickListener(searchOnClickListener);        //点击登陆        login.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                clearBackground();                startActivity(new Intent(getActivity(), UserLoginActivity.class));            }        });        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                AddOpStockResponse.DataBean dataBean = datas.get(position);                if (dataBean != null) {                    //跳转详情                    StockStateDetailsActivity.startStockDetailActivity(getContext(), dataBean.getStockcode(), dataBean.getStockname());                }            }        });    }    /**     * 每次进入检查token,处理退出登录并清空内存数据     */    @Override    public void onResume() {        super.onResume();        checkToken();    }    @Subscribe(sticky = true)    public void onEvent(OpChangedEvent opChangedEvent) {        refreshDatas();    }    @Override    public void onDestroyView() {        EventBus.getDefault().unregister(this);        super.onDestroyView();    }    /**     * 返回时判断刷新数据     */    @Override    public void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        if (resultCode == OPTIONAL_FRAG) {            String sortStock = data.getStringExtra("sortStock");            if (!TextUtils.isEmpty(sortStock)) {                sortStockDatas(sortStock);            } else {                refreshDatas();            }        }    }    @Override    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {        super.onViewCreated(view, savedInstanceState);        //获取父fragment获取三个点击事件        MainActivity mainActivity = (MainActivity) getActivity();        Fragment opsFragment = mainActivity.getSupportFragmentManager().findFragmentByTag("R.id.navi_message");        if (opsFragment != null && opsFragment instanceof OptionalStockFragment) {            rbEdit = ((OptionalStockFragment) opsFragment).getRbEdit();            cancelSort = ((OptionalStockFragment) opsFragment).getCancelSort();            ib_search = ((OptionalStockFragment) opsFragment).getIb_search();            rbEdit.setOnClickListener(EditOnClickListener);            cancelSort.setOnClickListener(cancelSortOnClickListener);            ib_search.setOnClickListener(searchOnClickListener);        }    }    private void getdata() {        if (TextUtils.isEmpty(TokenManager.getInstance().getToken())) {            dealNoToken();        } else {            WebService.getInstance()                    .retrofitService                    .QueryOp(PackParamsUtils.getHash(new TokenRequest(TokenManager.getInstance().getToken())))//                    .QueryOp(TokenManager.getInstance().getToken())                    .flatMap(new FlatMapFunc1>())                    .subscribeOn(Schedulers.io())                    .observeOn(AndroidSchedulers.mainThread())                    .subscribe(new Action1() {                        @Override                        public void call(List dataBeen) {                            clearBackground();                            if (dataBeen == null || dataBeen.size() == 0) {                                if (addStock.getVisibility() != View.VISIBLE) {                                    addStock.setVisibility(View.VISIBLE);                                }                                if (optionalStockAdapter != null) {                                    datas.clear();                                    originDatas.clear();                                    optionalStockAdapter.notifyDataSetChanged();                                }                                return;                            }                            datas.clear();                            datas = dataBeen;                            originDatas.clear();                            for (AddOpStockResponse.DataBean bean : dataBeen) {                                originDatas.add(bean);                            }                            optionalStockAdapter = new OptionalStockAdapter();                            listView.setAdapter(optionalStockAdapter);                            sortAdapter();                        }                    }, new ThrowableAction1(getActivity(), this), new CompletedAction0(this));        }    }    public class OptionalStockAdapter extends BaseAdapter {        @Override        public int getCount() {            return datas.size();        }        @Override        public Object getItem(int position) {            return datas.get(position);        }        @Override        public long getItemId(int position) {            return position;        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            ViewHolder holder;            if (convertView == null) {                holder = new ViewHolder();                convertView = LayoutInflater.from(getActivity()).inflate(R.layout.optional_stock_list_item, null);                holder.marketName = (TextView) convertView.findViewById(R.id.market_name);                holder.marketcode = (TextView) convertView.findViewById(R.id.market_code);                holder.curdot = (TextView) convertView.findViewById(R.id.curdot);                holder.rate = (TextView) convertView.findViewById(R.id.rate);                convertView.setTag(holder);            } else {                holder = (ViewHolder) convertView.getTag();            }            if (datas.get(position) != null) {                DecimalFormat df1 = new DecimalFormat("0.00");//格式化小数                holder.marketName.setText(datas.get(position).getStockname());                holder.marketcode.setText(datas.get(position).getStockcode());                if (!TextUtils.isEmpty(datas.get(position).getPrice())) {                    holder.curdot.setText(df1.format(Double.valueOf(datas.get(position).getPrice())));                } else {                    holder.curdot.setText("0.00");                }                String percent = datas.get(position).getPercent();                DecimalFormat df = new DecimalFormat("0.00%");//格式化百分数                percent = df.format(Double.valueOf(percent));                if (Double.parseDouble(datas.get(position).getPrice()) < 0.001) {                    holder.rate.setBackgroundResource(R.drawable.shape_grey_background);                    holder.rate.setText("停牌");                } else {                    if (percent.contains("-")) {                        holder.rate.setBackgroundResource(R.drawable.shape_green_background);                        holder.rate.setText(percent);                    } else if (percent.startsWith("0.00")) {                        holder.rate.setBackgroundResource(R.drawable.shape_grey_background);                        holder.rate.setText(percent);                    } else {                        holder.rate.setBackgroundResource(R.drawable.shape_red_background);                        holder.rate.setText("+" + percent);                    }                }            }            return convertView;        }    }    /**     * 处理编辑自选股界面回来的数据上传     *     * @param sortStock     */    private void sortStockDatas(String sortStock) {        if (TextUtils.isEmpty(TokenManager.getInstance().getToken())) {            dealNoToken();        } else {            WebService.getInstance()                    .retrofitService                    .updateOpStock(PackParamsUtils.getHash(new UpdataOptionStockRequest(TokenManager.getInstance().getToken(), sortStock)))//                    .updateOpStock(TokenManager.getInstance().getToken(), sortStock)                    .subscribeOn(Schedulers.io())                    .observeOn(AndroidSchedulers.mainThread())                    .subscribe(new Action1() {                        @Override                        public void call(NormalResponse dataBean) {                            clearBackground();                        }                    }, new ThrowableAction1(getActivity(), this) {                        @Override                        public void dealSpecial(Throwable throwable) {                            ToastUtils.show(getActivity(), "自选股排序失败");                            refreshDatas();                        }                    }, new CompletedAction0(this) {                        @Override                        public void dealSpecial() {                            refreshDatas();                        }                    });        }    }    /**     * 根据当前页面已排的顺序,在重新请求数据的时候重新更新顺序     */    private void sortAdapter() {        if (priceSortTag != 0 && percentSortTag == 0) {            switch (priceSortTag) {                case 1:                    Collections.sort(datas, descSort);                    if (optionalStockAdapter != null) {                        optionalStockAdapter.notifyDataSetChanged();                    }                    return;                case 2:                    Collections.sort(datas, asccSort);                    if (optionalStockAdapter != null) {                        optionalStockAdapter.notifyDataSetChanged();                    }                    return;                default:                    return;            }        }        if (percentSortTag != 0 && priceSortTag == 0) {            switch (percentSortTag) {                case 1:                    Collections.sort(datas, descPercent);                    if (optionalStockAdapter != null) {                        optionalStockAdapter.notifyDataSetChanged();                    }                    return;                case 2:                    Collections.sort(datas, ascPercent);                    if (optionalStockAdapter != null) {                        optionalStockAdapter.notifyDataSetChanged();                    }                    return;                default:                    return;            }        }    }    /**     * 刷新数据     */    private void refreshDatas() {//            @Override//            public void run() {//                ptrLayout.autoRefresh();//            }//        });        getdata();    }    /**     * 清空排序     */    private void clearSort() {        datas.clear();        for (AddOpStockResponse.DataBean bean : originDatas) {            datas.add(bean);        }        if (optionalStockAdapter != null) {            optionalStockAdapter.notifyDataSetChanged();        }    }    /**     * 复位箭头方向     */    private void restoreArrorw() {        Drawable drawable = getResources().getDrawable(R.drawable.ic_arrow_bottom_right_black_18dp);        drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());        textPrice.setCompoundDrawables(null, null, drawable, null);        Drawable drawabledown = getResources().getDrawable(R.drawable.ic_arrow_bottom_right_black_18dp);        drawabledown.setBounds(0, 0, drawabledown.getMinimumWidth(), drawabledown.getMinimumHeight());        textPercent.setCompoundDrawables(null, null, drawabledown, null);    }    /**     * resume检查是否有token,没有清楚当前界面所有数据     */    private void checkToken() {        if (TextUtils.isEmpty(TokenManager.getInstance().getToken())) {            clearBackground();            ptrLayout.setEnabled(false);            if (login.getVisibility() != View.VISIBLE) {                login.setVisibility(View.VISIBLE);            }            if (datas != null) {//未登录不显示自选股                datas.clear();                originDatas.clear();                if (optionalStockAdapter == null) {                    optionalStockAdapter = new OptionalStockAdapter();                    listView.setAdapter(optionalStockAdapter);                } else {                    optionalStockAdapter.notifyDataSetChanged();                }            }            finishLoading();            tokenTag = TokenTag.NO_TOKEN;        } else {            if (tokenTag == TokenTag.NO_TOKEN) {                refreshDatas();                tokenTag = TokenTag.DEFAULT;            }            ptrLayout.setEnabled(true);        }    }    /**     * 处理没有Token情况     */    private void dealNoToken() {        clearBackground();        ptrLayout.setEnabled(false);        if (login.getVisibility() != View.VISIBLE) {            login.setVisibility(View.VISIBLE);        }        if (datas != null) {//未登录不显示自选股            datas.clear();            if (optionalStockAdapter == null) {                optionalStockAdapter = new OptionalStockAdapter();                listView.setAdapter(optionalStockAdapter);            } else {                optionalStockAdapter.notifyDataSetChanged();            }        }        finishLoading();    }    private void clearBackground() {        if (login.getVisibility() != View.GONE) {            login.setVisibility(View.GONE);        }        if (addStock.getVisibility() != View.GONE) {            addStock.setVisibility(View.GONE);        }    }    static class ViewHolder {        TextView marketName;        TextView marketcode;        TextView curdot;        TextView rate;    }}

更多相关文章

  1. AllowBackup/FullBackupContent Problems
  2. android listview adater
  3. Android(安卓)PopupWindow简单使用
  4. Android(安卓)FTP Server
  5. ch020 Android(安卓)SQLite3(第一部分)
  6. android 操作sqlite数据库
  7. android之PopupWindow
  8. webservice1(队列上传 呼叫)
  9. android 操作sqlite数据库

随机推荐

  1. unity通过android adb查看真机日志
  2. android中xml tools属性详解
  3. Atom E6xx 系列明年推出,將支援 Android(
  4. Android(安卓)Studio开发(一)模拟微信页面
  5. 创建应用快捷方式到桌面
  6. 2013年7月Android设备版本及屏幕尺寸分布
  7. RecyclerView如何实现滑动过程中暂停图片
  8. Android实现视频硬编码
  9. Android(安卓)Fragment学习笔记(二)----F
  10. android源码解析(十七)-->Activity布局加载