《Android項目實戰-博學谷》個人模塊

個人模塊界面

思路

因爲此界面只是主界面中的一部分,因此無需建立一個新的 Activity ,只須要在 layout 目錄下新建一個佈局便可,同理導入圖片至 drawable 目錄下java

具體代碼以下: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>

Analysis工具類

思路

因爲本項目在保存和獲取數據時會屢次用到用戶名,所以建立一個工具類 AnalysisUtils 用於獲取用戶名,以便後續調用app

具體代碼以下:ide

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;

運行效果

運行效果

相關文章
相關標籤/搜索