Commit a0d1f22656b59a01ba64dced0b1e6667a6ed8ccd

Authored by 张建亮
1 parent 9e640847

创建baseAdapter,baseFragment

app/build.gradle
... ... @@ -35,6 +35,7 @@ android {
35 35 versionName "3.0.0"
36 36 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
37 37  
  38 +
38 39 ndk {
39 40 moduleName "gold"
40 41 ldLibs "log", "z", "m"
... ...
app/src/main/java/com/cnlive/goldenline/baseadpter/BaseBindingAdapter.java 0 → 100644
  1 +package com.cnlive.goldenline.baseadpter;
  2 +
  3 +import android.content.Context;
  4 +import android.databinding.DataBindingUtil;
  5 +import android.databinding.ViewDataBinding;
  6 +import android.support.v7.widget.RecyclerView;
  7 +import android.view.LayoutInflater;
  8 +import android.view.ViewGroup;
  9 +
  10 +
  11 +import com.cnlive.goldenline.BR;
  12 +
  13 +import java.util.ArrayList;
  14 +import java.util.List;
  15 +
  16 +
  17 +
  18 +/**
  19 + * Created by ZJL on 2017/5/14.
  20 + */
  21 +
  22 +public class BaseBindingAdapter<D, B extends ViewDataBinding> extends RecyclerView.Adapter<BaseBindingVH<B>> {
  23 + protected Context mContext;
  24 + protected int mLayoutId;
  25 + protected List<D> mDatas;
  26 + protected LayoutInflater mInfalter;
  27 + //用于设置Item的事件Presenter
  28 + protected Object ItemPresenter;
  29 +
  30 + public BaseBindingAdapter(Context mContext, List mDatas, int mLayoutId) {
  31 + this.mContext = mContext;
  32 + this.mLayoutId = mLayoutId;
  33 + this.mDatas = mDatas;
  34 + this.mInfalter = LayoutInflater.from(mContext);
  35 + }
  36 +
  37 + public BaseBindingAdapter(Context mContext, List mDatas) {
  38 + this.mContext = mContext;
  39 + this.mDatas = mDatas;
  40 + this.mInfalter = LayoutInflater.from(mContext);
  41 + }
  42 +
  43 + @Override
  44 + public BaseBindingVH<B> onCreateViewHolder(ViewGroup parent, int viewType) {
  45 + BaseBindingVH<B> holder = new BaseBindingVH<B>((B) DataBindingUtil.inflate(mInfalter, mLayoutId, parent, false));
  46 + onCreateViewHolder(holder);
  47 + return holder;
  48 + }
  49 +
  50 + /**
  51 + * 如果需要给Vh设置监听器啥的 可以在这里
  52 + *
  53 + * @param holder
  54 + */
  55 + public void onCreateViewHolder(BaseBindingVH<B> holder) {
  56 +
  57 + }
  58 +
  59 + /**
  60 + * 子类除了绑定数据,还要设置监听器等其他操作。
  61 + * 可以重写这个方法,不要删掉super.onBindViewHolder(holder, position);
  62 + *
  63 + * @param holder
  64 + * @param position
  65 + */
  66 + @Override
  67 + public void onBindViewHolder(BaseBindingVH<B> holder, int position) {
  68 + holder.getBinding().setVariable(BR.data, mDatas.get(position));
  69 + holder.getBinding().setVariable(BR.itemP, ItemPresenter);
  70 + holder.getBinding().executePendingBindings();
  71 + }
  72 +
  73 + @Override
  74 + public int getItemCount() {
  75 + return null != mDatas ? mDatas.size() : 0;
  76 + }
  77 +
  78 + public Object getItemPresenter() {
  79 + return ItemPresenter;
  80 + }
  81 +
  82 + /**
  83 + * 用于设置Item的事件Presenter
  84 + *
  85 + * @param itemPresenter
  86 + * @return
  87 + */
  88 + public BaseBindingAdapter setItemPresenter(Object itemPresenter) {
  89 + ItemPresenter = itemPresenter;
  90 + return this;
  91 + }
  92 +
  93 + /**
  94 + * 刷新数据,初始化数据
  95 + *
  96 + * @param list
  97 + */
  98 + public void setDatas(List<D> list) {
  99 + if (this.mDatas != null) {
  100 + if (null != list) {
  101 + List<D> temp = new ArrayList<D>();
  102 + temp.addAll(list);
  103 + this.mDatas.clear();
  104 + this.mDatas.addAll(temp);
  105 + } else {
  106 + this.mDatas.clear();
  107 + }
  108 + } else {
  109 + this.mDatas = list;
  110 + }
  111 + notifyDataSetChanged();
  112 + }
  113 +
  114 + /**
  115 + * 删除一条数据
  116 + * 会自动定向刷新
  117 + *
  118 + * @param i
  119 + */
  120 + public void remove(int i) {
  121 + if (null != mDatas && mDatas.size() > i && i > -1) {
  122 + mDatas.remove(i);
  123 + notifyItemRemoved(i);
  124 + }
  125 + }
  126 +
  127 + /**
  128 + * 添加一条数据 至队尾
  129 + * 会自动定向刷新
  130 + *
  131 + * @param data
  132 + */
  133 + public void add(D data) {
  134 + if (data != null && mDatas != null) {
  135 + mDatas.add(data);
  136 + notifyItemInserted(mDatas.size());
  137 + }
  138 + }
  139 +
  140 + /**
  141 + * 在指定位置添加一条数据
  142 + * 会自动定向刷新
  143 + * <p>
  144 + * 如果指定位置越界,则添加在队尾
  145 + *
  146 + * @param position
  147 + * @param data
  148 + */
  149 + public void add(int position, D data) {
  150 + if (data != null && mDatas != null) {
  151 + if (mDatas.size() > position && position > -1) {
  152 + mDatas.add(position, data);
  153 + notifyItemInserted(position);
  154 + } else {
  155 + add(data);
  156 + }
  157 + }
  158 + }
  159 +
  160 +
  161 + /**
  162 + * 加载更多数据
  163 + *
  164 + * @param list
  165 + */
  166 + public void addDatas(List<D> list) {
  167 + if (null != list) {
  168 + List<D> temp = new ArrayList<D>();
  169 + temp.addAll(list);
  170 + if (this.mDatas != null) {
  171 + this.mDatas.addAll(temp);
  172 + } else {
  173 + this.mDatas = temp;
  174 + }
  175 + notifyDataSetChanged();
  176 + }
  177 +
  178 + }
  179 +
  180 +
  181 + public List<D> getDatas() {
  182 + return mDatas;
  183 + }
  184 +}
... ...
app/src/main/java/com/cnlive/goldenline/baseadpter/BaseBindingVH.java 0 → 100644
  1 +package com.cnlive.goldenline.baseadpter;
  2 +
  3 +import android.databinding.ViewDataBinding;
  4 +import android.support.v7.widget.RecyclerView;
  5 +
  6 +/**
  7 + * Created by ZJL on 2017/5/14.
  8 + */
  9 +
  10 +public class BaseBindingVH<T extends ViewDataBinding> extends RecyclerView.ViewHolder {
  11 + protected final T mBinding;
  12 +
  13 + public BaseBindingVH(T t) {
  14 + super(t.getRoot());
  15 + mBinding = t;
  16 + }
  17 +
  18 + public T getBinding() {
  19 + return mBinding;
  20 + }
  21 +}
... ...
app/src/main/java/com/cnlive/goldenline/ui/activity/RegisterActivity.java
... ... @@ -4,16 +4,49 @@ import android.app.ProgressDialog;
4 4 import android.content.Context;
5 5 import android.content.Intent;
6 6 import android.databinding.DataBindingUtil;
  7 +import android.databinding.Observable;
7 8 import android.os.Bundle;
8 9 import android.os.CountDownTimer;
9 10 import android.support.annotation.NonNull;
  11 +import android.text.TextUtils;
  12 +import android.view.View;
  13 +import android.widget.Button;
  14 +import android.widget.EditText;
  15 +import android.widget.ImageButton;
10 16  
11 17 import com.cnlive.goldenline.R;
  18 +import com.cnlive.goldenline.api.UserAPI;
  19 +import com.cnlive.goldenline.application.GoldenLineApplication;
12 20 import com.cnlive.goldenline.databinding.ActivityRegisterBinding;
  21 +import com.cnlive.goldenline.model.User;
  22 +import com.cnlive.goldenline.model.mine.SyncUserRequestBean;
13 23 import com.cnlive.goldenline.ui.base.BaseActivity;
  24 +import com.cnlive.goldenline.ui.base.GoldenlineCall;
  25 +import com.cnlive.goldenline.util.ChannelUtil;
  26 +import com.cnlive.goldenline.util.RestAdapterUtils;
  27 +import com.cnlive.goldenline.util.SPUtils;
  28 +import com.cnlive.goldenline.util.ShareSdkUtil;
  29 +import com.cnlive.goldenline.util.SystemTools;
  30 +import com.cnlive.goldenline.util.ToastUtil;
14 31 import com.cnlive.goldenline.util.UserService;
15 32 import com.cnlive.goldenline.viewmodel.LoginViewModel;
  33 +import com.cnlive.libs.user.IUserService;
  34 +import com.cnlive.libs.user.UserUtil;
16 35 import com.cnlive.libs.user.model.DataEntity;
  36 +import com.cnlive.libs.user.model.UserData;
  37 +
  38 +import java.util.HashMap;
  39 +import java.util.Locale;
  40 +
  41 +import butterknife.BindView;
  42 +import cn.sharesdk.framework.Platform;
  43 +import cn.sharesdk.framework.PlatformActionListener;
  44 +import cn.sharesdk.sina.weibo.SinaWeibo;
  45 +import cn.sharesdk.tencent.qq.QQ;
  46 +import cn.sharesdk.wechat.friends.Wechat;
  47 +import retrofit.Callback;
  48 +import retrofit.RetrofitError;
  49 +import retrofit.client.Response;
17 50  
18 51 /**
19 52 * Description: 登录页面
... ... @@ -24,12 +57,28 @@ public class RegisterActivity extends BaseActivity {
24 57  
25 58  
26 59 private LoginViewModel loginViewModel;
  60 + ActivityRegisterBinding activityRegisterBinding;
27 61  
28 62 public static void start(@NonNull Context context) {
29 63 Intent starter = new Intent(context, RegisterActivity.class);
30 64 context.startActivity(starter);
31 65 }
32   -
  66 + @BindView(R.id.imabutton_colse)
  67 + protected ImageButton imabutton_colse;
  68 + @BindView(R.id.imabutton_wx)
  69 + protected ImageButton imabutton_wx;
  70 + @BindView(R.id.imabutton_wb)
  71 + protected ImageButton imabutton_wb;
  72 + @BindView(R.id.imabutton_qq)
  73 + protected ImageButton imabutton_qq;
  74 + @BindView(R.id.button_sendcode)
  75 + protected Button button_sendcode;
  76 + @BindView(R.id.button_login)
  77 + protected Button button_login;
  78 + @BindView(R.id.et_phone)
  79 + protected EditText et_phone;
  80 + @BindView(R.id.et_code)
  81 + protected EditText et_code;
33 82 /**
34 83 * 当前时间
35 84 */
... ... @@ -51,13 +100,50 @@ public class RegisterActivity extends BaseActivity {
51 100 @Override
52 101 protected void onCreate(Bundle savedInstanceState) {
53 102 super.onCreate(savedInstanceState);
54   - ActivityRegisterBinding activityRegisterBinding= DataBindingUtil.setContentView(this,R.layout.activity_register);
55   - loginViewModel=new LoginViewModel(activityRegisterBinding,RegisterActivity.this);
  103 + setContentView(R.layout.activity_register);
  104 + activityRegisterBinding = DataBindingUtil.setContentView(this, R.layout.activity_register);
  105 + loginViewModel = new LoginViewModel(activityRegisterBinding, RegisterActivity.this);
56 106 activityRegisterBinding.setLoginViewModel(loginViewModel);
57   -// setContentView(R.layout.activity_register);
58   -// mUserService = new UserService(this);
  107 + //判断是否是电话号码
  108 + loginViewModel.isPhone.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
  109 + @Override
  110 + public void onPropertyChanged(Observable observable, int i) {
  111 + if (loginViewModel.isPhone.get()) {
  112 + activityRegisterBinding.buttonSendcode.setBackgroundResource(R.mipmap.verificationcode_canuse);
  113 + activityRegisterBinding.buttonSendcode.setTextColor(GoldenLineApplication.getInstance().getResources().getColor(R.color.color_ff6633));
  114 + activityRegisterBinding.buttonSendcode.setEnabled(true);
  115 + } else {
  116 + activityRegisterBinding.buttonSendcode.setBackgroundResource(R.mipmap.verificationcode_nouse);
  117 + activityRegisterBinding.buttonSendcode.setTextColor(GoldenLineApplication.getInstance().getResources().getColor(R.color.color_959595));
  118 + activityRegisterBinding.buttonSendcode.setEnabled(false);
  119 + }
  120 + }
  121 + });
  122 + loginViewModel.isCodeRight.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
  123 + @Override
  124 + public void onPropertyChanged(Observable observable, int i) {
  125 + if ((loginViewModel.isCodeRight.get())) {
  126 + activityRegisterBinding.buttonLogin.setBackgroundResource(R.drawable.login_canuse);
  127 + activityRegisterBinding.buttonLogin.setEnabled(true);
  128 + } else {
  129 + activityRegisterBinding.buttonLogin.setBackgroundResource(R.drawable.login_nouse);
  130 + activityRegisterBinding.buttonLogin.setEnabled(false);
  131 + }
  132 + }
  133 + });
59 134  
60   -// initData();
  135 + mUserService = new UserService(this);
  136 +
  137 + initData();
  138 + }
  139 +
  140 + private void initData() {
  141 + imabutton_colse.setOnClickListener(this);
  142 + imabutton_wx.setOnClickListener(this);
  143 + imabutton_wb.setOnClickListener(this);
  144 + imabutton_qq.setOnClickListener(this);
  145 + button_sendcode.setOnClickListener(this);
  146 + button_login.setOnClickListener(this);
61 147 }
62 148  
63 149 @Override
... ... @@ -65,17 +151,249 @@ public class RegisterActivity extends BaseActivity {
65 151 super.onResume();
66 152 }
67 153  
  154 + @Override
  155 + public void onClick(View v) {
  156 + super.onClick(v);
  157 + switch (v.getId()) {
  158 + case R.id.imabutton_colse://关闭
  159 + this.finish();
  160 + break;
  161 + case R.id.imabutton_wx://微信登录
  162 + getOtherInfo("1", Wechat.NAME);
  163 + showLogin();
  164 + break;
  165 + case R.id.imabutton_wb://微博登录
  166 + getOtherInfo("2", SinaWeibo.NAME);
  167 + showLogin();
  168 + break;
  169 + case R.id.imabutton_qq://qq登录
  170 + getOtherInfo("3", QQ.NAME);
  171 + showLogin();
  172 + break;
  173 + case R.id.button_sendcode://发送验证码
  174 + UserUtil.sendMessage(IUserService.QUICK_LOGIN, et_phone.getText().toString(), new MobileCall());
  175 + break;
  176 + case R.id.button_login://登录
  177 + showLogin();
  178 + UserUtil.quickLogin(String.valueOf(et_phone.getText()), String.valueOf(et_code.getText()), ChannelUtil.getChannelFromApk(this), userDataCall);
  179 + break;
  180 +
  181 + default:
  182 + break;
  183 + }
  184 + }
  185 + /**
  186 + * 显示等待框
  187 + */
  188 + private void showLogin() {
  189 + progressDialog = ProgressDialog.show(this, "登录中...", "请稍候...", true, false);
  190 + progressDialog.setCancelable(true);// 设置是否可以通过点击Back键取消
  191 + progressDialog.setCanceledOnTouchOutside(false);// 设置在点击Dialog外是否取消Dialog进度条
  192 + }
  193 +
  194 + /**
  195 + * 发送验证码sdk
  196 + */
  197 + class MobileCall extends GoldenlineCall {
  198 + @Override
  199 + protected void dowork(int what, String extra, Object obj) {
  200 + switch (what) {
  201 + case IUserService.SUCCESS:
  202 + ToastUtil.showToast("验证码已发送");
  203 + startTimer();
  204 + break;
  205 + default:
  206 + ToastUtil.showToast("验证码发送失败");
  207 + updateSendButtonText(true);
  208 + break;
  209 + }
  210 +
  211 + }
  212 +
  213 + /**
  214 + * 开始计数器
  215 + */
  216 + private void startTimer() {
  217 + countDownTimer = new CountDownTimer(COUNTDOWN_TIME * 1000, 990) {
  218 + @Override
  219 + public void onTick(long leftTimeInMilliseconds) {
  220 + long seconds = leftTimeInMilliseconds / 1000;
  221 + count = (int) (seconds % 60);
  222 + updateSendButtonText(false);
  223 + }
  224 +
  225 + @Override
  226 + public void onFinish() {
  227 + updateSendButtonText(true);
  228 + }
  229 +
  230 + };
  231 + countDownTimer.start();
  232 + }
  233 +
  234 + /**
  235 + * 更新按钮的状态
  236 + *
  237 + * @param showNormal
  238 + */
  239 + private void updateSendButtonText(boolean showNormal) {
  240 + if (showNormal) {
  241 + button_sendcode.setText(getResources().getString(R.string.logoin_getcode));
  242 + button_sendcode.setBackgroundResource(R.mipmap.verificationcode_canuse);
  243 + button_sendcode.setTextColor(getResources().getColor(R.color.color_ff6633));
  244 + button_sendcode.setEnabled(true);
  245 + } else {
  246 + String s = String.format(Locale.CHINESE, getString(R.string.format_verify_countdown), count);
  247 + button_sendcode.setText(s);
  248 + button_sendcode.setBackgroundResource(R.mipmap.verificationcode_nouse);
  249 + button_sendcode.setTextColor(getResources().getColor(R.color.color_959595));
  250 + button_sendcode.setEnabled(false);
  251 + }
  252 + }
  253 + }
  254 +
  255 + /**
  256 + * 登陆完成后调用此方法同步用户其他信息
  257 + */
  258 + public void doNetWork(final DataEntity data) {
  259 + final UserAPI userApi = RestAdapterUtils.getRestAPI(UserAPI.class);
  260 + SyncUserRequestBean request = new SyncUserRequestBean(this);
  261 + request.setEmail(data.getEmail());
  262 + request.setExtInfo(data.getExtInfo());
  263 + request.setFaceUrl(data.getFaceUrl());
  264 + request.setGender(data.getGender().equals("m") ? 0 : (data.getGender().equals("f") ? 1 : 2));
  265 + request.sethUid(data.gethUid());
  266 + request.setLocation(data.getLocation());
  267 + request.setMobile(data.getMobile());
  268 + request.setNickName(data.getNickName());
  269 + request.setUid(data.getUid());
  270 + userApi.syncUserById(request, new Callback<User>() {
  271 + @Override
  272 + public void success(User user, Response response) {
  273 + progressDialog.dismiss();
  274 + if (null != user && user.getErrorCode().equals("0")) {
  275 + mUserService.setUserInfo(user, "");
  276 + SPUtils.put(RegisterActivity.this, "isSubscribeSuccess", true);
  277 + //登录成功关闭页面
  278 + finish();
  279 + }else{
  280 + ToastUtil.showToast(getString(R.string.login_error));
  281 + }
  282 + }
  283 +
  284 + @Override
  285 + public void failure(RetrofitError error) {
  286 + ToastUtil.showToast(getString(R.string.login_error));
  287 + progressDialog.dismiss();
  288 + }
  289 + });
  290 + }
  291 +
  292 + public void getOtherInfo(final String tag, String s) {
  293 + ShareSdkUtil.loginThirdPlatform(RegisterActivity.this, s, new PlatformActionListener() {
  294 + @Override
  295 + public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {//授权成功
68 296  
  297 + progressDialog.dismiss();
69 298  
  299 + if (null != hashMap && hashMap.size() > 0) {
  300 + if ("1" == tag) {
  301 + //微信登录
  302 + String uid = (String) hashMap.get("unionid");
  303 + String nick = platform.getDb().getUserName();
  304 + String location = (String) hashMap.get("city");
  305 + String avatar = (String) hashMap.get("headimgurl");
  306 + //为了红包提现,把uid传为openid
  307 + String openid = (String) hashMap.get("openid");
  308 + String userSex = "n";
  309 + int sex = (int) hashMap.get("sex");
  310 + if (sex == 1) {
  311 + userSex = "m";
  312 + } else if (sex == 2) {
  313 + userSex = "f";
  314 + }
  315 + UserUtil.thirdPartyLogin(3, uid, nick, userSex, location, avatar,
  316 + ChannelUtil.getChannelFromApk(RegisterActivity.this), userDataCall);
  317 + }else if ("2" == tag) {
  318 + //微博登录
  319 + String uid = platform.getDb().getUserId();
  320 + String nick = (String) hashMap.get("name");
  321 + String location = (String) hashMap.get("location");
  322 + String userSex = (String) hashMap.get("gender");
  323 + String avatar = (String) hashMap.get("profile_image_url");
  324 + UserUtil.thirdPartyLogin(1, uid, nick, userSex, location, avatar,
  325 + ChannelUtil.getChannelFromApk(RegisterActivity.this), userDataCall);
  326 + } else if("3" == tag){
  327 + //QQ登录
  328 + String uid = platform.getDb().getUserId();
  329 + String nick = (String) hashMap.get("nickname");
  330 + String location = (String) hashMap.get("city");
  331 + String avatar = hashMap.get("figureurl_qq_2").toString();
  332 + String userSex = "n";
  333 + String sex = (String) hashMap.get("gender");
  334 + if (sex.equals("男")) {
  335 + userSex = "m";
  336 + } else if (sex.equals("女")) {
  337 + userSex = "f";
  338 + }
  339 + UserUtil.thirdPartyLogin(2, uid, nick, userSex, location, avatar,
  340 + ChannelUtil.getChannelFromApk(RegisterActivity.this), userDataCall);
  341 + }
  342 + }
  343 + }
70 344  
  345 + @Override
  346 + public void onError(Platform platform, int i, Throwable throwable) {//授权失败
  347 + progressDialog.dismiss();
  348 + }
71 349  
  350 + @Override
  351 + public void onCancel(Platform platform, int i) {//取消
  352 + SystemTools.show_msg(getBaseContext(), "已取消");
  353 + progressDialog.dismiss();
  354 + }
  355 + });
  356 + }
  357 +
  358 + private GoldenlineCall userDataCall = new GoldenlineCall() {
  359 + @Override
  360 + protected void dowork(int what, String extra, Object obj) {
  361 + UserData userData = (UserData) obj;
  362 + DataEntity data = userData.getData();
  363 + GoldenLineApplication.mEdit.clear();
  364 + GoldenLineApplication.mEdit.putBoolean("isQuckLogin", true);
  365 + GoldenLineApplication.mEdit.putString("uid", data.getUid());
  366 + GoldenLineApplication.mEdit.putString("hUid", data.gethUid());
  367 + GoldenLineApplication.mEdit.apply();
  368 + if (null != data) {
  369 + //手机号为空必须要进行绑定,这是正在上演的逻辑
  370 + if(TextUtils.isEmpty(data.getMobile())){
  371 + Intent starter = new Intent(RegisterActivity.this, UpdatePhoneActivity.class);
  372 + starter.putExtra("title","绑定手机号");
  373 + starter.putExtra("uid",data.getUid());
  374 + starter.putExtra("data",data);
  375 + startActivityForResult(starter,101);
  376 + }else{
  377 + doNetWork(data);
  378 + }
  379 + }
  380 + }
  381 +
  382 + @Override
  383 + public void onState(int what, String extra, Object obj) {
  384 + super.onState(what, extra, obj);
  385 + if (what != IUserService.SUCCESS) {
  386 + progressDialog.dismiss();
  387 + }
  388 + }
  389 + };
72 390 @Override
73 391 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
74 392 super.onActivityResult(requestCode, resultCode, data);
75   - if(resultCode == RESULT_OK){
  393 + if (resultCode == RESULT_OK) {
76 394 DataEntity dataEntity = (DataEntity) (data.getSerializableExtra("data"));
77 395  
78   - loginViewModel. doNetWork(dataEntity);
  396 + doNetWork(dataEntity);
79 397 }
80 398 }
81 399 }
... ...
app/src/main/java/com/cnlive/goldenline/ui/base/DBBaseFragment.java 0 → 100644
  1 +package com.cnlive.goldenline.ui.base;
  2 +
  3 +import android.databinding.DataBindingUtil;
  4 +import android.databinding.ViewDataBinding;
  5 +import android.graphics.drawable.AnimationDrawable;
  6 +import android.os.Bundle;
  7 +import android.support.annotation.Nullable;
  8 +import android.support.v4.app.Fragment;
  9 +import android.view.LayoutInflater;
  10 +import android.view.View;
  11 +import android.view.ViewGroup;
  12 +import android.widget.ImageView;
  13 +import android.widget.LinearLayout;
  14 +import android.widget.RelativeLayout;
  15 +
  16 +import com.cnlive.goldenline.R;
  17 +
  18 +
  19 +/**
  20 + * Created by ZJL on 2017/5/14.
  21 + */
  22 +public abstract class DBBaseFragment<SV extends ViewDataBinding> extends Fragment {
  23 +
  24 + // 布局view
  25 + protected SV bindingView;
  26 + // fragment是否显示了
  27 + protected boolean mIsVisible = false;
  28 + // 加载中
  29 + private LinearLayout mLlProgressBar;
  30 + // 加载失败
  31 + private LinearLayout mRefresh;
  32 + // 内容布局
  33 + protected RelativeLayout mContainer;
  34 + // 动画
  35 + private AnimationDrawable mAnimationDrawable;
  36 +
  37 + @Nullable
  38 + @Override
  39 + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  40 + View ll = inflater.inflate(R.layout.fragment_base, null);
  41 + bindingView = DataBindingUtil.inflate(getActivity().getLayoutInflater(), setContent(), null, false);
  42 + RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
  43 + bindingView.getRoot().setLayoutParams(params);
  44 + mContainer = (RelativeLayout) ll.findViewById(R.id.container);
  45 + mContainer.addView(bindingView.getRoot());
  46 + return ll;
  47 + }
  48 +
  49 + /**
  50 + * 在这里实现Fragment数据的缓加载.
  51 + */
  52 + @Override
  53 + public void setUserVisibleHint(boolean isVisibleToUser) {
  54 + super.setUserVisibleHint(isVisibleToUser);
  55 + if (getUserVisibleHint()) {
  56 + mIsVisible = true;
  57 + onVisible();
  58 + } else {
  59 + mIsVisible = false;
  60 + onInvisible();
  61 + }
  62 + }
  63 +
  64 + protected void onInvisible() {
  65 + }
  66 +
  67 + /**
  68 + * 显示时加载数据,需要这样的使用
  69 + * 注意声明 isPrepared,先初始化
  70 + * 生命周期会先执行 setUserVisibleHint 再执行onActivityCreated
  71 + * 在 onActivityCreated 之后第一次显示加载数据,只加载一次
  72 + */
  73 + protected void loadData() {
  74 + }
  75 +
  76 + protected void onVisible() {
  77 + loadData();
  78 + }
  79 +
  80 + @Override
  81 + public void onActivityCreated(@Nullable Bundle savedInstanceState) {
  82 + super.onActivityCreated(savedInstanceState);
  83 + mLlProgressBar = getView(R.id.ll_progress_bar);
  84 + ImageView img = getView(R.id.img_progress);
  85 +
  86 + // 加载动画
  87 + mAnimationDrawable = (AnimationDrawable) img.getDrawable();
  88 + // 默认进入页面就开启动画
  89 + if (!mAnimationDrawable.isRunning()) {
  90 + mAnimationDrawable.start();
  91 + }
  92 + mRefresh = getView(R.id.ll_error_refresh);
  93 + // 点击加载失败布局
  94 + mRefresh.setOnClickListener(new View.OnClickListener() {
  95 + @Override
  96 + public void onClick(View view) {
  97 + showLoading();
  98 + onRefresh();
  99 + }
  100 + });
  101 + bindingView.getRoot().setVisibility(View.GONE);
  102 +
  103 + }
  104 +
  105 + protected <T extends View> T getView(int id) {
  106 + return (T) getView().findViewById(id);
  107 + }
  108 +
  109 + /**
  110 + * 布局
  111 + */
  112 + public abstract int setContent();
  113 +
  114 + /**
  115 + * 加载失败后点击后的操作
  116 + */
  117 + protected void onRefresh() {
  118 +
  119 + }
  120 +
  121 + /**
  122 + * 显示加载中状态
  123 + */
  124 + protected void showLoading() {
  125 + if (mLlProgressBar.getVisibility() != View.VISIBLE) {
  126 + mLlProgressBar.setVisibility(View.VISIBLE);
  127 + }
  128 + // 开始动画
  129 + if (!mAnimationDrawable.isRunning()) {
  130 + mAnimationDrawable.start();
  131 + }
  132 + if (bindingView.getRoot().getVisibility() != View.GONE) {
  133 + bindingView.getRoot().setVisibility(View.GONE);
  134 + }
  135 + if (mRefresh.getVisibility() != View.GONE) {
  136 + mRefresh.setVisibility(View.GONE);
  137 + }
  138 + }
  139 +
  140 + /**
  141 + * 加载完成的状态
  142 + */
  143 + protected void showContentView() {
  144 + if (mLlProgressBar.getVisibility() != View.GONE) {
  145 + mLlProgressBar.setVisibility(View.GONE);
  146 + }
  147 + // 停止动画
  148 + if (mAnimationDrawable.isRunning()) {
  149 + mAnimationDrawable.stop();
  150 + }
  151 + if (mRefresh.getVisibility() != View.GONE) {
  152 + mRefresh.setVisibility(View.GONE);
  153 + }
  154 + if (bindingView.getRoot().getVisibility() != View.VISIBLE) {
  155 + bindingView.getRoot().setVisibility(View.VISIBLE);
  156 + }
  157 + }
  158 +
  159 + /**
  160 + * 加载失败点击重新加载的状态
  161 + */
  162 + protected void showError() {
  163 + if (mLlProgressBar.getVisibility() != View.GONE) {
  164 + mLlProgressBar.setVisibility(View.GONE);
  165 + }
  166 + // 停止动画
  167 + if (mAnimationDrawable.isRunning()) {
  168 + mAnimationDrawable.stop();
  169 + }
  170 + if (mRefresh.getVisibility() != View.VISIBLE) {
  171 + mRefresh.setVisibility(View.VISIBLE);
  172 + }
  173 + if (bindingView.getRoot().getVisibility() != View.GONE) {
  174 + bindingView.getRoot().setVisibility(View.GONE);
  175 + }
  176 + }
  177 +
  178 + @Override
  179 + public void onDestroy() {
  180 + super.onDestroy();
  181 + }
  182 +
  183 + public void removeSubscription() {
  184 + }
  185 +}
... ...
app/src/main/java/com/cnlive/goldenline/ui/fragment/MainFragment.java 0 → 100644
  1 +package com.cnlive.goldenline.ui.fragment;
  2 +
  3 +import android.os.Bundle;
  4 +import android.support.annotation.Nullable;
  5 +import android.util.SparseArray;
  6 +import android.view.View;
  7 +import android.widget.RelativeLayout;
  8 +
  9 +import com.cnlive.goldenline.R;
  10 +import com.cnlive.goldenline.api.CmsAPI;
  11 +import com.cnlive.goldenline.databinding.FragmentMainBinding;
  12 +import com.cnlive.goldenline.model.Tabbean;
  13 +import com.cnlive.goldenline.ui.activity.CheckDayActivity;
  14 +import com.cnlive.goldenline.ui.activity.SearchResultActivity;
  15 +import com.cnlive.goldenline.ui.adapter.ViewType;
  16 +import com.cnlive.goldenline.ui.base.DBBaseFragment;
  17 +import com.cnlive.goldenline.ui.model.RecyclerViewNormalBean;
  18 +import com.cnlive.goldenline.util.RestAdapterUtils;
  19 +import com.cnlive.goldenline.util.StringUtils;
  20 +import com.cnlive.goldenline.util.TimeUtil;
  21 +import com.cnlive.goldenline.util.UserService;
  22 +
  23 +/**
  24 + * Created by ZJL on 2017/5/14.
  25 + */
  26 +
  27 +public class MainFragment extends DBBaseFragment<FragmentMainBinding> implements View.OnClickListener{
  28 + private UserService mUserService;
  29 + private CmsAPI api;
  30 + private SparseArray<RecyclerViewNormalBean> dataArray = new SparseArray<>();
  31 + @Override
  32 + public int setContent() {
  33 + return R.layout.fragment_main;
  34 + }
  35 +
  36 + @Override
  37 + public void onActivityCreated(@Nullable Bundle savedInstanceState) {
  38 + super.onActivityCreated(savedInstanceState);
  39 + mUserService = new UserService(getContext());
  40 + bindingView.frHomeImgCalendar.setOnClickListener(this);
  41 + bindingView.frHomeImgCalendarScroll.setOnClickListener(this);
  42 + bindingView.frHomeImgSearch.setOnClickListener(this);
  43 + bindingView.frHomeEtSearch.setOnClickListener(this);
  44 + bindingView.frHomeEtSearch.setHint(StringUtils.fromatETHint("搜索您喜欢的内容", 11));
  45 + api = RestAdapterUtils.getRestAPI(CmsAPI.class);
  46 + int currentDay = TimeUtil.getInstance().getCurrentDay();
  47 + bindingView.frHomeTvCalendar.setText(String.valueOf(currentDay));
  48 + bindingView.frHomeTvCalendarScroll.setText(String.valueOf(currentDay));
  49 + generateVideoType();
  50 +// initRecyclerView();
  51 +// initData2AdapterData();
  52 + bindingView.frHomeImgCalendar.setOnClickListener(this);
  53 + bindingView.frHomeImgCalendarScroll.setOnClickListener(this);
  54 + }
  55 +
  56 + @Override
  57 + public void onClick(View view) {
  58 + switch (view.getId()) {
  59 + case R.id.fr_home_img_calendar:
  60 + case R.id.fr_home_img_calendar_scroll:
  61 + CheckDayActivity.start(getActivity());
  62 + break;
  63 + case R.id.fr_home_img_search:
  64 + case R.id.fr_home_et_search:
  65 + SearchResultActivity.start(getActivity());
  66 + break;
  67 + }
  68 + }
  69 +
  70 + public class ClickPresenter {
  71 + public void onAddClick(View v) {
  72 + }
  73 + }
  74 +
  75 + private void generateVideoType() {
  76 + Tabbean tabbean = new Tabbean();
  77 + tabbean.setTabImgRes(R.drawable.click_refresh);
  78 + RecyclerViewNormalBean normalBean = new RecyclerViewNormalBean();
  79 + normalBean.setT(tabbean);
  80 + normalBean.setDataType(ViewType.TYPE_DEFAULT_BANNER);
  81 + dataArray.put(0, normalBean);
  82 +
  83 + Tabbean tab = new Tabbean();
  84 + tab.setTabName("舞台剧");
  85 + tab.setTabImgRes(R.mipmap.wutaiju);
  86 + tab.setTabSort(1);
  87 + RecyclerViewNormalBean data = new RecyclerViewNormalBean();
  88 + data.setT(tab);
  89 + data.setDataType(ViewType.TYPE_VIDEOTYPE);
  90 + dataArray.put(1, data);
  91 +
  92 + Tabbean tab1 = new Tabbean();
  93 + tab1.setTabName("演唱会");
  94 + tab1.setTabImgRes(R.mipmap.yanchanghui);
  95 + tab1.setTabSort(2);
  96 + RecyclerViewNormalBean data1 = new RecyclerViewNormalBean();
  97 + data1.setT(tab1);
  98 + data1.setDataType(ViewType.TYPE_VIDEOTYPE);
  99 + dataArray.put(2, data1);
  100 +
  101 + Tabbean tab2 = new Tabbean();
  102 + tab2.setTabName("相声");
  103 + tab2.setTabImgRes(R.mipmap.xiangsheng);
  104 + tab2.setTabSort(3);
  105 + RecyclerViewNormalBean data2 = new RecyclerViewNormalBean();
  106 + data2.setT(tab2);
  107 + data2.setDataType(ViewType.TYPE_VIDEOTYPE);
  108 + dataArray.put(3, data2);
  109 +
  110 + Tabbean tab3 = new Tabbean();
  111 + tab3.setTabName("儿童剧");
  112 + tab3.setTabSort(4);
  113 + tab3.setTabImgRes(R.mipmap.ertongju);
  114 + RecyclerViewNormalBean data3 = new RecyclerViewNormalBean();
  115 + data3.setT(tab3);
  116 + data3.setDataType(ViewType.TYPE_VIDEOTYPE);
  117 + dataArray.put(4, data3);
  118 +
  119 + Tabbean tab4 = new Tabbean();
  120 + tab4.setTabName("更多");
  121 + tab4.setTabSort(5);
  122 + tab4.setTabImgRes(R.mipmap.gengduo);
  123 + RecyclerViewNormalBean data4 = new RecyclerViewNormalBean();
  124 + data4.setT(tab4);
  125 + data4.setDataType(ViewType.TYPE_VIDEOTYPE);
  126 + dataArray.put(5, data4);
  127 + }
  128 +}
... ...
app/src/main/java/com/cnlive/goldenline/viewmodel/LoginViewModel.java
1 1 package com.cnlive.goldenline.viewmodel;
2 2  
3 3 import android.app.Activity;
4   -import android.app.ProgressDialog;
5 4 import android.content.Context;
6   -import android.content.Intent;
7 5 import android.databinding.BaseObservable;
8   -import android.os.CountDownTimer;
  6 +import android.databinding.ObservableBoolean;
9 7 import android.text.Editable;
10   -import android.text.TextUtils;
11 8 import android.util.Log;
12 9 import android.view.View;
13 10  
14   -import com.cnlive.goldenline.R;
15   -import com.cnlive.goldenline.api.UserAPI;
16   -import com.cnlive.goldenline.application.GoldenLineApplication;
17 11 import com.cnlive.goldenline.databinding.ActivityRegisterBinding;
18   -import com.cnlive.goldenline.model.User;
19   -import com.cnlive.goldenline.model.mine.SyncUserRequestBean;
20   -import com.cnlive.goldenline.ui.activity.UpdatePhoneActivity;
21   -import com.cnlive.goldenline.ui.base.GoldenlineCall;
22   -import com.cnlive.goldenline.util.ChannelUtil;
23   -import com.cnlive.goldenline.util.RestAdapterUtils;
24   -import com.cnlive.goldenline.util.SPUtils;
25   -import com.cnlive.goldenline.util.ShareSdkUtil;
26 12 import com.cnlive.goldenline.util.StringUtils;
27   -import com.cnlive.goldenline.util.SystemTools;
28   -import com.cnlive.goldenline.util.ToastUtil;
29   -import com.cnlive.goldenline.util.UserService;
30   -import com.cnlive.libs.user.IUserService;
31   -import com.cnlive.libs.user.UserUtil;
32   -import com.cnlive.libs.user.model.DataEntity;
33   -import com.cnlive.libs.user.model.UserData;
34   -
35   -import java.util.HashMap;
36   -import java.util.Locale;
37   -
38   -import cn.sharesdk.framework.Platform;
39   -import cn.sharesdk.framework.PlatformActionListener;
40   -import cn.sharesdk.sina.weibo.SinaWeibo;
41   -import cn.sharesdk.tencent.qq.QQ;
42   -import cn.sharesdk.wechat.friends.Wechat;
43   -import retrofit.Callback;
44   -import retrofit.RetrofitError;
45   -import retrofit.client.Response;
46 13  
47 14 /**
48 15 * Created by ZJL on 2017/5/10.
49 16 */
50 17  
51 18 public class LoginViewModel extends BaseObservable{
52   - /**
53   - * 当前时间
54   - */
55   - private int count = COUNTDOWN_TIME;
56   - /**
57   - * 验证码计算时间
58   - */
59   - private final static int COUNTDOWN_TIME = 60;
60   -
61   - /**
62   - * 倒数计数器
63   - */
64   - private CountDownTimer countDownTimer;
65   -
66   - private String mPhone;
67   - private ActivityRegisterBinding activityRegisterBinding;
68   -
  19 + public final ObservableBoolean isPhone = new ObservableBoolean();
  20 + public final ObservableBoolean isCodeRight = new ObservableBoolean();
69 21 private String phone = "";
70   - private ProgressDialog progressDialog;
71   - private UserService mUserService;
72 22 private Context context;
73 23  
74 24 public LoginViewModel(ActivityRegisterBinding activityRegisterBinding, Context context){
75   - this.activityRegisterBinding=activityRegisterBinding;
76 25 this.context=context;
77   - mUserService = new UserService(context);
78   - }
79   - public String getMPhone() {
80   - return mPhone;
81   - }
82   -
83   - public void setMPhone(String mPhone) {
84   - this.mPhone = mPhone;
85 26 }
86 27  
87 28 /**
... ... @@ -91,248 +32,23 @@ public class LoginViewModel extends BaseObservable{
91 32 */
92 33 public void formatCode(Editable code) {
93 34 if (phone.length() == 11 && StringUtils.checkPhoneNumber(phone.toString()) && code.length() == 6) {
94   - activityRegisterBinding.buttonLogin.setBackgroundResource(R.drawable.login_canuse);
95   - activityRegisterBinding.buttonLogin.setEnabled(true);
  35 + isCodeRight.set(true);
96 36 } else {
97   - activityRegisterBinding.buttonLogin.setBackgroundResource(R.drawable.login_nouse);
98   - activityRegisterBinding.buttonLogin.setEnabled(false);
  37 + isCodeRight.set(false);
99 38 }
100 39 }
101 40 public void phoneChanged(Editable phone) {
102 41 Log.i("name","titleChanged");
103 42 this.phone = phone.toString();
104 43 if (phone.length() == 11 && StringUtils.checkPhoneNumber(phone.toString())) {
105   - activityRegisterBinding.buttonSendcode.setBackgroundResource(R.mipmap.verificationcode_canuse);
106   - activityRegisterBinding.buttonSendcode.setTextColor(GoldenLineApplication.getInstance().getResources().getColor(R.color.color_ff6633));
107   - activityRegisterBinding.buttonSendcode.setEnabled(true);
  44 + isPhone.set(true);
  45 +
108 46 } else {
109   - activityRegisterBinding.buttonSendcode.setBackgroundResource(R.mipmap.verificationcode_nouse);
110   - activityRegisterBinding.buttonSendcode.setTextColor(GoldenLineApplication.getInstance().getResources().getColor(R.color.color_959595));
111   - activityRegisterBinding.buttonSendcode.setEnabled(false);
112   - }
113   - }
114   - public void sendSMS(View view){
115   - UserUtil.sendMessage(IUserService.QUICK_LOGIN, activityRegisterBinding.etPhone.getText().toString(), new MobileCall());
  47 + isPhone.set(false);
116 48  
117   - }
118   - public void toLogin(View view){
119   - showLogin();
120   - UserUtil.quickLogin(String.valueOf(activityRegisterBinding.etPhone.getText()), String.valueOf(activityRegisterBinding.etCode.getText()), ChannelUtil.getChannelFromApk(context), userDataCall);
121   - }
122   - public void weixinLogin(View view){
123   - getOtherInfo("1", Wechat.NAME);
124   - showLogin();
125   - }
126   - public void weiboLogin(View view){
127   - getOtherInfo("2", SinaWeibo.NAME);
128   - showLogin();
129   - }
130   - public void qqLogin(View view){
131   - getOtherInfo("3", QQ.NAME);
132   - showLogin();
  49 + }
133 50 }
134 51 public void closeAct(View view){
135 52 ( (Activity)context).finish();
136 53 }
137   - /**
138   - * 发送验证码sdk
139   - */
140   - class MobileCall extends GoldenlineCall {
141   - @Override
142   - protected void dowork(int what, String extra, Object obj) {
143   - switch (what) {
144   - case IUserService.SUCCESS:
145   - ToastUtil.showToast("验证码已发送");
146   - startTimer();
147   - break;
148   - default:
149   - ToastUtil.showToast("验证码发送失败");
150   - updateSendButtonText(true);
151   - break;
152   - }
153   -
154   - }
155   -
156   - /**
157   - * 开始计数器
158   - */
159   - private void startTimer() {
160   - countDownTimer = new CountDownTimer(COUNTDOWN_TIME * 1000, 990) {
161   - @Override
162   - public void onTick(long leftTimeInMilliseconds) {
163   - long seconds = leftTimeInMilliseconds / 1000;
164   - count = (int) (seconds % 60);
165   - updateSendButtonText(false);
166   - }
167   -
168   - @Override
169   - public void onFinish() {
170   - updateSendButtonText(true);
171   - }
172   -
173   - };
174   - countDownTimer.start();
175   - }
176   -
177   - /**
178   - * 更新按钮的状态
179   - *
180   - * @param showNormal
181   - */
182   - private void updateSendButtonText(boolean showNormal) {
183   - if (showNormal) {
184   - activityRegisterBinding.buttonSendcode.setText(GoldenLineApplication.getInstance().getResources().getString(R.string.logoin_getcode));
185   - activityRegisterBinding.buttonSendcode.setBackgroundResource(R.mipmap.verificationcode_canuse);
186   - activityRegisterBinding.buttonSendcode.setTextColor(GoldenLineApplication.getInstance().getResources().getColor(R.color.color_ff6633));
187   - activityRegisterBinding.buttonSendcode.setEnabled(true);
188   - } else {
189   - String s = String.format(Locale.CHINESE, GoldenLineApplication.getInstance().getString(R.string.format_verify_countdown), count);
190   - activityRegisterBinding.buttonSendcode.setText(s);
191   - activityRegisterBinding.buttonSendcode.setBackgroundResource(R.mipmap.verificationcode_nouse);
192   - activityRegisterBinding.buttonSendcode.setTextColor(GoldenLineApplication.getInstance().getResources().getColor(R.color.color_959595));
193   - activityRegisterBinding.buttonSendcode.setEnabled(false);
194   - }
195   - }
196   - }
197   - /**
198   - * 显示等待框
199   - */
200   - private void showLogin() {
201   - progressDialog = ProgressDialog.show(context, "登录中...", "请稍候...", true, false);
202   - progressDialog.setCancelable(true);// 设置是否可以通过点击Back键取消
203   - progressDialog.setCanceledOnTouchOutside(false);// 设置在点击Dialog外是否取消Dialog进度条
204   - }
205   - private GoldenlineCall userDataCall = new GoldenlineCall() {
206   - @Override
207   - protected void dowork(int what, String extra, Object obj) {
208   - UserData userData = (UserData) obj;
209   - DataEntity data = userData.getData();
210   - GoldenLineApplication.mEdit.clear();
211   - GoldenLineApplication.mEdit.putBoolean("isQuckLogin", true);
212   - GoldenLineApplication.mEdit.putString("uid", data.getUid());
213   - GoldenLineApplication.mEdit.putString("hUid", data.gethUid());
214   - GoldenLineApplication.mEdit.apply();
215   - if (null != data) {
216   - //手机号为空必须要进行绑定,这是正在上演的逻辑
217   - if(TextUtils.isEmpty(data.getMobile())){
218   - Intent starter = new Intent(context, UpdatePhoneActivity.class);
219   - starter.putExtra("title","绑定手机号");
220   - starter.putExtra("uid",data.getUid());
221   - starter.putExtra("data",data);
222   - ( (Activity)context).startActivityForResult(starter,101);
223   - }else{
224   - doNetWork(data);
225   - }
226   - }
227   - }
228   -
229   - @Override
230   - public void onState(int what, String extra, Object obj) {
231   - super.onState(what, extra, obj);
232   - if (what != IUserService.SUCCESS) {
233   - progressDialog.dismiss();
234   - }
235   - }
236   - };
237   - /**
238   - * 登陆完成后调用此方法同步用户其他信息
239   - */
240   - public void doNetWork(final DataEntity data) {
241   - final UserAPI userApi = RestAdapterUtils.getRestAPI(UserAPI.class);
242   - SyncUserRequestBean request = new SyncUserRequestBean(context);
243   - request.setEmail(data.getEmail());
244   - request.setExtInfo(data.getExtInfo());
245   - request.setFaceUrl(data.getFaceUrl());
246   - request.setGender(data.getGender().equals("m") ? 0 : (data.getGender().equals("f") ? 1 : 2));
247   - request.sethUid(data.gethUid());
248   - request.setLocation(data.getLocation());
249   - request.setMobile(data.getMobile());
250   - request.setNickName(data.getNickName());
251   - request.setUid(data.getUid());
252   - userApi.syncUserById(request, new Callback<User>() {
253   - @Override
254   - public void success(User user, Response response) {
255   - progressDialog.dismiss();
256   - if (null != user && user.getErrorCode().equals("0")) {
257   - mUserService.setUserInfo(user, "");
258   - SPUtils.put(context, "isSubscribeSuccess", true);
259   - //登录成功关闭页面
260   - ( (Activity)context).finish();
261   - }else{
262   - ToastUtil.showToast(GoldenLineApplication.getInstance().getString(R.string.login_error));
263   - }
264   - }
265   -
266   - @Override
267   - public void failure(RetrofitError error) {
268   - ToastUtil.showToast(GoldenLineApplication.getInstance().getString(R.string.login_error));
269   - progressDialog.dismiss();
270   - }
271   - });
272   - }
273   - public void getOtherInfo(final String tag, String s) {
274   - ShareSdkUtil.loginThirdPlatform(context, s, new PlatformActionListener() {
275   - @Override
276   - public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {//授权成功
277   -
278   - progressDialog.dismiss();
279   -
280   - if (null != hashMap && hashMap.size() > 0) {
281   - if ("1" == tag) {
282   - //微信登录
283   - String uid = (String) hashMap.get("unionid");
284   - String nick = platform.getDb().getUserName();
285   - String location = (String) hashMap.get("city");
286   - String avatar = (String) hashMap.get("headimgurl");
287   - //为了红包提现,把uid传为openid
288   - String openid = (String) hashMap.get("openid");
289   - String userSex = "n";
290   - int sex = (int) hashMap.get("sex");
291   - if (sex == 1) {
292   - userSex = "m";
293   - } else if (sex == 2) {
294   - userSex = "f";
295   - }
296   - UserUtil.thirdPartyLogin(3, uid, nick, userSex, location, avatar,
297   - ChannelUtil.getChannelFromApk(context), userDataCall);
298   - }else if ("2" == tag) {
299   - //微博登录
300   - String uid = platform.getDb().getUserId();
301   - String nick = (String) hashMap.get("name");
302   - String location = (String) hashMap.get("location");
303   - String userSex = (String) hashMap.get("gender");
304   - String avatar = (String) hashMap.get("profile_image_url");
305   - UserUtil.thirdPartyLogin(1, uid, nick, userSex, location, avatar,
306   - ChannelUtil.getChannelFromApk(context), userDataCall);
307   - } else if("3" == tag){
308   - //QQ登录
309   - String uid = platform.getDb().getUserId();
310   - String nick = (String) hashMap.get("nickname");
311   - String location = (String) hashMap.get("city");
312   - String avatar = hashMap.get("figureurl_qq_2").toString();
313   - String userSex = "n";
314   - String sex = (String) hashMap.get("gender");
315   - if (sex.equals("男")) {
316   - userSex = "m";
317   - } else if (sex.equals("女")) {
318   - userSex = "f";
319   - }
320   - UserUtil.thirdPartyLogin(2, uid, nick, userSex, location, avatar,
321   - ChannelUtil.getChannelFromApk(context), userDataCall);
322   - }
323   - }
324   - }
325   -
326   - @Override
327   - public void onError(Platform platform, int i, Throwable throwable) {//授权失败
328   - progressDialog.dismiss();
329   - }
330   -
331   - @Override
332   - public void onCancel(Platform platform, int i) {//取消
333   - SystemTools.show_msg(GoldenLineApplication.getInstance().getBaseContext(), "已取消");
334   - progressDialog.dismiss();
335   - }
336   - });
337   - }
338 54 }
... ...
app/src/main/java/com/cnlive/goldenline/viewmodel/MainFragmentModel.java 0 → 100644
  1 +package com.cnlive.goldenline.viewmodel;
  2 +
  3 +import android.content.Context;
  4 +import android.databinding.BaseObservable;
  5 +
  6 +import com.cnlive.goldenline.ui.fragment.MainFragment;
  7 +
  8 +/**
  9 + * Created by ZJL on 2017/5/15.
  10 + */
  11 +
  12 +public class MainFragmentModel extends BaseObservable {
  13 + private Context context;
  14 + public MainFragmentModel(Context context){
  15 + this.context=context;
  16 +
  17 + }
  18 +}
... ...
app/src/main/res/layout/activity_register.xml
... ... @@ -62,7 +62,6 @@
62 62 android:textSize="14sp" />
63 63  
64 64 <Button
65   - android:onClick="@{loginViewModel::sendSMS}"
66 65 android:id="@+id/button_sendcode"
67 66 android:layout_width="wrap_content"
68 67 android:layout_height="wrap_content"
... ... @@ -120,7 +119,6 @@
120 119 </RelativeLayout>
121 120  
122 121 <Button
123   - android:onClick="@{loginViewModel::toLogin}"
124 122 android:id="@+id/button_login"
125 123 android:layout_width="wrap_content"
126 124 android:layout_height="wrap_content"
... ... @@ -164,7 +162,6 @@
164 162 android:layout_weight="1">
165 163  
166 164 <ImageButton
167   - android:onClick="@{loginViewModel::weixinLogin}"
168 165 android:id="@+id/imabutton_wx"
169 166 android:layout_width="wrap_content"
170 167 android:layout_height="wrap_content"
... ... @@ -178,7 +175,6 @@
178 175 android:layout_weight="1">
179 176  
180 177 <ImageButton
181   - android:onClick="@{loginViewModel::weiboLogin}"
182 178 android:id="@+id/imabutton_wb"
183 179 android:layout_width="wrap_content"
184 180 android:layout_height="wrap_content"
... ... @@ -187,7 +183,6 @@
187 183 </RelativeLayout>
188 184  
189 185 <RelativeLayout
190   - android:onClick="@{loginViewModel::qqLogin}"
191 186 android:layout_width="wrap_content"
192 187 android:layout_height="wrap_content"
193 188 android:layout_weight="1">
... ...
app/src/main/res/layout/fragment_base.xml 0 → 100644
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<layout xmlns:android="http://schemas.android.com/apk/res/android">
  3 +
  4 + <LinearLayout
  5 + android:id="@+id/ll_root"
  6 + android:layout_width="match_parent"
  7 + android:layout_height="match_parent"
  8 + android:background="@color/gray_line_color"
  9 + android:orientation="vertical">
  10 +
  11 + <!--有可能直接显示(固定的布局,非必须,按需要添加)-->
  12 + <RelativeLayout
  13 + android:id="@+id/rl_content_part"
  14 + android:layout_width="match_parent"
  15 + android:layout_height="wrap_content" />
  16 +
  17 +
  18 + <RelativeLayout
  19 + android:id="@+id/container"
  20 + android:layout_width="match_parent"
  21 + android:layout_height="match_parent">
  22 +
  23 +
  24 + <!--加载失败-->
  25 + <LinearLayout
  26 + android:id="@+id/ll_error_refresh"
  27 + android:layout_width="match_parent"
  28 + android:layout_height="match_parent"
  29 + android:gravity="center"
  30 + android:orientation="vertical"
  31 + android:visibility="gone">
  32 +
  33 + <ImageView
  34 + android:id="@+id/img_err"
  35 + android:layout_width="wrap_content"
  36 + android:layout_height="wrap_content"
  37 + android:src="@mipmap/ic_launcher" />
  38 +
  39 + <TextView
  40 + android:layout_width="wrap_content"
  41 + android:layout_height="wrap_content"
  42 + android:layout_marginTop="15dp"
  43 + android:text="加载失败,点击重试"
  44 + android:textSize="15sp" />
  45 + </LinearLayout>
  46 +
  47 + <!--加载中..-->
  48 + <LinearLayout
  49 + android:id="@+id/ll_progress_bar"
  50 + android:layout_width="wrap_content"
  51 + android:layout_height="wrap_content"
  52 + android:layout_centerHorizontal="true"
  53 + android:layout_marginTop="80dp"
  54 + android:gravity="center_vertical">
  55 +
  56 + <ImageView
  57 + android:id="@+id/img_progress"
  58 + android:layout_width="wrap_content"
  59 + android:layout_height="wrap_content"
  60 + android:src="@mipmap/ic_launcher" />
  61 +
  62 + <TextView
  63 + android:layout_width="wrap_content"
  64 + android:layout_height="wrap_content"
  65 + android:layout_marginLeft="10dp"
  66 + android:text="努力加载中..."
  67 + android:textColor="@color/main_black"
  68 + android:textSize="14sp" />
  69 +
  70 + </LinearLayout>
  71 + </RelativeLayout>
  72 + </LinearLayout>
  73 +</layout>
0 74 \ No newline at end of file
... ...
app/src/main/res/layout/fragment_main.xml 0 → 100644
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<layout xmlns:android="http://schemas.android.com/apk/res/android">
  3 + <data>
  4 +
  5 + <variable
  6 + name="clickPresenter"
  7 + type="com.cnlive.goldenline.ui.fragment.MainFragment.ClickPresenter"/>
  8 + </data>
  9 +<RelativeLayout
  10 + xmlns:tools="http://schemas.android.com/tools"
  11 + android:layout_width="match_parent"
  12 + android:layout_height="match_parent"
  13 + android:background="@color/color_bg"
  14 + android:orientation="vertical">
  15 +
  16 + <include
  17 + layout="@layout/view_recyclerview"
  18 + android:layout_width="match_parent"
  19 + android:layout_height="wrap_content" />
  20 +
  21 + <LinearLayout
  22 + android:layout_width="match_parent"
  23 + android:layout_height="wrap_content"
  24 + android:orientation="vertical">
  25 +
  26 + <View
  27 + android:id="@+id/fake_status_bar"
  28 + android:layout_width="match_parent"
  29 + android:layout_height="5dp"
  30 + android:background="#28272d"
  31 + android:fitsSystemWindows="true"
  32 + android:visibility="invisible" />
  33 +
  34 + <!--搜索栏-->
  35 + <RelativeLayout
  36 + android:id="@+id/fr_home_layout_operation"
  37 + android:layout_width="match_parent"
  38 + android:layout_height="wrap_content"
  39 + android:background="#28272d"
  40 + android:paddingBottom="8dp"
  41 + android:paddingLeft="10dp"
  42 + android:paddingRight="19dp"
  43 + android:visibility="gone">
  44 +
  45 + <TextView
  46 + android:id="@+id/fr_home_et_search"
  47 + android:layout_width="297dp"
  48 + android:layout_height="27dp"
  49 + android:layout_alignParentLeft="true"
  50 + android:background="@drawable/home_search_edittet_bg"
  51 + android:drawableLeft="@mipmap/navigation_bar_search_icon"
  52 + android:drawablePadding="8dp"
  53 + android:text="搜索您喜欢的内容"
  54 + android:textColor="#999"
  55 + android:textColorHint="#999"
  56 + android:textSize="11sp" />
  57 +
  58 + <FrameLayout
  59 + android:layout_width="wrap_content"
  60 + android:layout_height="wrap_content"
  61 + android:layout_alignBottom="@id/fr_home_et_search"
  62 + android:layout_alignParentRight="true"
  63 + android:layout_alignTop="@id/fr_home_et_search">
  64 +
  65 + <ImageView
  66 + android:id="@+id/fr_home_img_calendar_scroll"
  67 + android:layout_width="32dp"
  68 + android:layout_height="32dp"
  69 + android:layout_gravity="center"
  70 + android:src="@mipmap/navigationbar_calender" />
  71 +
  72 + <TextView
  73 + android:id="@+id/fr_home_tv_calendar_scroll"
  74 + android:layout_width="wrap_content"
  75 + android:layout_height="wrap_content"
  76 + android:layout_gravity="center"
  77 + android:gravity="center_horizontal"
  78 + android:includeFontPadding="false"
  79 + android:paddingTop="3dp"
  80 + android:textColor="#fff"
  81 + android:textSize="9sp"
  82 + tools:text="12" />
  83 + </FrameLayout>
  84 + </RelativeLayout>
  85 +
  86 + <RelativeLayout
  87 + android:id="@+id/fr_home_layout_search"
  88 + android:layout_width="match_parent"
  89 + android:layout_height="wrap_content"
  90 + android:paddingBottom="8dp"
  91 + android:paddingLeft="10dp"
  92 + android:paddingRight="19dp">
  93 +
  94 + <FrameLayout
  95 + android:layout_width="wrap_content"
  96 + android:layout_height="wrap_content"
  97 + android:layout_alignParentRight="true">
  98 +
  99 + <ImageView
  100 + android:id="@+id/fr_home_img_calendar"
  101 + android:layout_width="wrap_content"
  102 + android:layout_height="27dp"
  103 + android:src="@mipmap/index_calendar_button" />
  104 +
  105 + <TextView
  106 + android:id="@+id/fr_home_tv_calendar"
  107 + android:layout_width="wrap_content"
  108 + android:layout_height="wrap_content"
  109 + android:layout_gravity="center"
  110 + android:gravity="center_horizontal"
  111 + android:includeFontPadding="false"
  112 + android:paddingTop="3dp"
  113 + android:textColor="#fff"
  114 + android:textSize="8sp"
  115 + tools:text="12" />
  116 + </FrameLayout>
  117 +
  118 + <ImageView
  119 + android:id="@+id/fr_home_img_search"
  120 + android:layout_width="wrap_content"
  121 + android:layout_height="27dp"
  122 + android:layout_alignParentLeft="true"
  123 + android:src="@mipmap/index_search_button" />
  124 + </RelativeLayout>
  125 + </LinearLayout>
  126 +
  127 +</RelativeLayout>
  128 +</layout>
0 129 \ No newline at end of file
... ...
app/src/main/res/layout/item.xml 0 → 100644
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<layout xmlns:android="http://schemas.android.com/apk/res/android">
  3 +
  4 + <data>
  5 +
  6 + <!--数据-->
  7 + <variable
  8 + name="data"
  9 + type="java.lang.Class"/>
  10 + <!--事件处理,例如点击事件-->
  11 + <variable
  12 + name="itemP"
  13 + type="java.lang.Class"/>
  14 + </data>
  15 +
  16 + <View
  17 + android:layout_width="match_parent"
  18 + android:layout_height="match_parent"/>
  19 +</layout>
  20 +
... ...