资讯专栏INFORMATION COLUMN

《Android项目实战-博学谷》我的模块

JohnLui / 926人阅读

摘要:我的模块界面思路由于此界面只是主界面中的一部分,所以无需创建一个新的,只需要在目录下新建一个布局即可,同理导入图片至目录下具体代码如下点击登录分割线效果播放记录设置工具类思路由于本项目在保存和获取数据时会多次用到用户名,因此创建一

我的模块界面 思路

由于此界面只是主界面中的一部分,所以无需创建一个新的 Activity ,只需要在 layout 目录下新建一个布局即可,同理导入图片至 drawable 目录下

具体代码如下:

main_view_myinfo.xml



    

        

        
    

    

    

        

        

        
    

    

    

        

        

        
    

    

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;
运行效果

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/68114.html

相关文章

  • Android项目实战-博学》底部导航栏

    摘要:底部导航栏布局思路本项目的主界面设计了底部导航栏,为了方便后续布局的搭建,创建一个底部导航栏的框架,修改主界面布局为,利用包裹标题栏与界面内容,将各界面内容设置为,再用一个包裹底部导航栏,在内部用三个来显示三个按钮具体代码如下限定大小 底部导航栏布局 思路 本项目的主界面设计了底部导航栏,为了方便后续布局的搭建,创建一个底部导航栏UI的框架,修改主界面布局为 RelativeLayou...

    余学文 评论0 收藏0
  • Android项目实战-博学》修改密码

    摘要:修改密码界面思路完成了设置部分接着完成设置中的第一个模块修改密码,创建,修改布局为具体代码如下请输入原始密码请输入新密码请再次输入新密码保存改密逻辑思路首先输入的原始密码与从中读取的原始密码必须一致,输入的新密码与原始密码不能相同,再次输 修改密码界面 思路 完成了设置部分接着完成设置中的第一个模块修改密码,创建 ModifyPswActivity ,修改布局为 LinearLayou...

    callmewhy 评论0 收藏0

发表评论

0条评论

JohnLui

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<