Commit a0d1f22656b59a01ba64dced0b1e6667a6ed8ccd
1 parent
9e640847
创建baseAdapter,baseFragment
Showing
12 changed files
with
1093 additions
and
306 deletions
app/build.gradle
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 | + | ... | ... |