安卓开发

android项目实战博学谷源码

具体代码如下:

main_view_myinfo.xml

?xml version="1.0" encoding="utf-8"? LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/white" android:orientation="vertical" LinearLayout android:id="@+id/ll_head" android:layout_width="fill_parent" android:layout_height="240dp" android:background="@drawable/myinfo_login_bg" android:orientation="vertical" ImageView android:id="@+id/iv_head_icon" android:layout_width="70dp" android:layout_height="70dp" android:layout_gravity="center_horizontal" android:layout_marginTop="75dp" android:src="@drawable/default_icon" / TextView android:id="@+id/tv_user_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="10dp" android:text="点击登录" android:textColor="@android:color/white" android:textSize="16sp" / /LinearLayout View android:layout_width="fill_parent" android:layout_height="1dp" android:layout_marginTop="20dp" android:background="#E3E3E3" / !–分割线效果– RelativeLayout android:id="@+id/rl_course_history" android:layout_width="fill_parent" android:layout_height="50dp" android:background="#F7F8F8" android:gravity="center_vertical" android:paddingLeft="10dp" android:paddingRight="10dp" ImageView android:id="@+id/iv_course_historyicon" android:layout_width="20dp" android:layout_height="20dp" android:layout_centerVertical="true" android:layout_marginLeft="25dp" android:src="@drawable/course_history_icon" / TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="25dp" android:layout_toRightOf="@id/iv_course_historyicon" android:text="播放记录" android:textColor="#A3A3A3" android:textSize="16sp" / ImageView android:layout_width="15dp" android:layout_height="15dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="25dp" android:src="@drawable/iv_right_arrow" / /RelativeLayout View android:layout_width="fill_parent" android:layout_height="1dp" android:background="#E3E3E3" / RelativeLayout android:id="@+id/rl_setting" android:layout_width="fill_parent" android:layout_height="50dp" android:background="#F7F8F8" android:gravity="center_vertical" android:paddingLeft="10dp" android:paddingRight="10dp" ImageView android:id="@+id/iv_userinfo_icon" android:layout_width="20dp" android:layout_height="20dp" android:layout_centerVertical="true" android:layout_marginLeft="25dp" android:src="@drawable/myinfo_setting_icon" / TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="25dp" android:layout_toRightOf="@id/iv_userinfo_icon" android:text="设置" android:textColor="#A3A3A3" android:textSize="16sp" / ImageView android:layout_width="15dp" android:layout_height="15dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="25dp" android:src="@drawable/iv_right_arrow" / /RelativeLayout View android:layout_width="fill_parent" android:layout_height="1dp" android:background="#E3E3E3" / /LinearLayout

android项目实战博学谷源码

Analysis工具类

思路

由于本项目在保存和获取数据时会多次用到用户名,因此创建一个工具类 AnalysisUtils 用于获取用户名,以便后续调用

具体代码如下:

AnalysisUtils

package cn.edu.lt.android.boxueguapp.utils;import android.content.Context;import android.content.SharedPreferences;/** * Created by lt on 2018/1/2. */public class AnalysisUtils { /** * 从SharedPreferences中读取登录用户名 * @param context * @return */ public static String readLoginUserName(Context context){ SharedPreferences sp=context.getSharedPreferences("loginInfo", Context.MODE_PRIVATE); String userName=sp.getString("loginUserName", ""); return userName; }}

我的模块逻辑

思路

在此界面中需要判断用户是否登录,若已登录则显示用户名,若未登录则显示“点击登录”,若用户已登录,当点击用户头像时跳转到个人资料界面,点击播放记录跳转到播放记录界面,点击设置时跳转到设置界面。首先需要新建一个包 view ,在其下新建一个类 MyInfoView ,

MyInfoView

package cn.edu.lt.android.boxueguapp.view;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.content.SharedPreferences;import android.view.LayoutInflater;import android.view.View;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.RelativeLayout;import android.widget.TextView;import android.widget.Toast;import cn.edu.lt.android.boxueguapp.R;import cn.edu.lt.android.boxueguapp.activity.LoginActivity;import cn.edu.lt.android.boxueguapp.utils.AnalysisUtils;/** * Created by lt on 2018/1/2. */public class MyInfoView { private Context mContext; private final LayoutInflater mInflater; private View mCurrentView; private LinearLayout ll_head; private ImageView iv_head_icon; private RelativeLayout rl_course_history; private RelativeLayout rl_setting; private TextView tv_user_name; /** * 由于SharedPreferences是通过context读取的,所以从构造方法中传递一个context * @param mContext */ public MyInfoView(Context mContext){ this.mContext = mContext; mInflater = LayoutInflater.from(mContext); } /** * 获取当前在导航栏上方显示对应的View */ public View getView(){ if (mCurrentView == null) { createView();//调用initView() } return mCurrentView; } private void createView() { initView(); } /** * 获取控件填充布局 * inflater布局填充器 */ private void initView() { mCurrentView = mInflater.inflate(R.layout.main_view_myinfo, null); ll_head = (LinearLayout) mCurrentView.findViewById(R.id.ll_head); iv_head_icon = (ImageView) mCurrentView.findViewById(R.id.iv_head_icon); rl_course_history = (RelativeLayout) mCurrentView.findViewById(R.id.rl_course_history); rl_setting = (RelativeLayout) mCurrentView.findViewById(R.id.rl_setting); tv_user_name = (TextView) mCurrentView.findViewById(R.id.tv_user_name); //用户名需要根据不同的登录状态进行不同的展示 setLoginParams(readLoginStatus());//拿到登录状态作为参数传递进去 //处理控件交互 ll_head.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //判断是否已经登录 if(readLoginStatus()){ //已登录跳转到个人资料界面 }else{ //未登录跳转到登录界面 Intent intent=new Intent(mContext,LoginActivity.class); ((Activity)mContext).startActivityForResult(intent,1); } } }); rl_course_history.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(readLoginStatus()){ //跳转到播放记录界面 }else{ Toast.makeText(mContext, "您还未登录,请先登录", Toast.LENGTH_SHORT).show(); } } }); rl_setting.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(readLoginStatus()){ //跳转到设置界面 }else{ Toast.makeText(mContext, "您还未登录,请先登录", Toast.LENGTH_SHORT).show(); } } }); } /** * 登录成功后设置我的界面 */ public void setLoginParams(boolean isLogin) { if(isLogin){ tv_user_name.setText(AnalysisUtils.readLoginUserName(mContext)); }else{ tv_user_name.setText("点击登录"); } } /** * 从SharedPreferences中读取登录状态 * @return */ private boolean readLoginStatus(){ SharedPreferences sp=mContext.getSharedPreferences("loginInfo", Context.MODE_PRIVATE); boolean isLogin=sp.getBoolean("isLogin", false); return isLogin; } /** * 显示当前导航栏上方所对应的view界面 */ public void showView() { if (mCurrentView == null){ createView(); } mCurrentView.setVisibility(View.VISIBLE); }}

然后需要在 MainActivity 传递登录成功的信息,覆写一个 onActivityResult 方法

MainActivity

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (data != null){ //从设置界面或登录界面传递过来的登录状态 boolean isLogin = data.getBooleanExtra("isLogin", false); if (isLogin){//登录成功时显示课程界面 clearBottomImageState(); selectDisplayView(0); } if (mMyInfoView != null) {//登录成功或退出登录时根据isLogin设置我的界面 mMyInfoView.setLoginParams(isLogin); } } }

再修改之前为了测试效果所修改的 SplashActivity 和 LoginActivity

SplashActivity

Intent intent = new Intent(SplashActivity.this, LoginActivity.class);改为Intent intent = new Intent(SplashActivity.this, MainActivity.class);

LoginActivity

Intent data=new Intent();data.putExtra("isLogin",true);setResult(RESULT_OK,data);LoginActivity.this.finish();//startActivity(new Intent(LoginActivity.this, MainActivity.class));删除此行return;

Similar Posts

发表评论

邮箱地址不会被公开。 必填项已用*标注