我是靠谱客的博主 兴奋大雁,最近开发中收集的这篇文章主要介绍 《Android项目实战-博学谷》我的模块,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我的模块界面

思路

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

具体代码如下:

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 用于获取用户名,以便后续调用

具体代码如下:

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;

运行效果

运行效果

最后

以上就是兴奋大雁为你收集整理的 《Android项目实战-博学谷》我的模块的全部内容,希望文章能够帮你解决 《Android项目实战-博学谷》我的模块所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部