怎么用Android开发一个学生管理系统
发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,本篇内容介绍了"怎么用Android开发一个学生管理系统"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成
千家信息网最后更新 2025年01月16日怎么用Android开发一个学生管理系统登录与忘记密码界面
注册界面
一、创建两个Drawable文件
考勤界面
签到界面
一、倒计时
二、位置签到
成绩查询界面
本篇内容介绍了"怎么用Android开发一个学生管理系统"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
效果演示
随手做的一个小玩意,还有很多功能没有完善,倘有疏漏,万望海涵。
实现功能总览
实现了登录、注册、忘记密码、成绩查询、考勤情况、课表查看、提交作业、课程打卡等。
代码
登录与忘记密码界面
登录与忘记密码界面采用的是TabLayout+ViewPager+PagerAdapter实现的
一、添加布局文件
View View_HomePager = LayoutInflater.from( Student.this ).inflate( R.layout.homeppage_item,null,false ); View View_Data = LayoutInflater.from( Student.this ).inflate( R.layout.data_item,null,false ); View View_Course = LayoutInflater.from( Student.this ).inflate( R.layout.course_item,null,false ); View View_My = LayoutInflater.from( Student.this ).inflate( R.layout.my_item,null,false );
private ListViews = new ArrayList<>( );
Views.add( View_HomePager ); Views.add( View_Data ); Views.add( View_Course ); Views.add( View_My );
二、添加标题文字
private ListTitles = new ArrayList<>( );
Titles.add( "首页" );Titles.add( "数据" );Titles.add( "课程" );Titles.add( "我的" );
三、绑定适配器
/*PagerAdapter 适配器代码如下*/public class ViewPagerAdapter extends PagerAdapter { private ListViews; private List Titles; public ViewPagerAdapter(List Views,List Titles){ this.Views = Views; this.Titles = Titles; } @Override public int getCount() { return Views.size(); } @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { return view == object; } @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) { container.addView( Views.get( position ) ); return Views.get( position ); } @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { container.removeView( Views.get( position ) ); } @Nullable @Override public CharSequence getPageTitle(int position) { return Titles.get( position ); }}
ViewPagerAdapter adapter = new ViewPagerAdapter( Views,Titles ); for (String title : Titles){ Title.addTab( Title.newTab().setText( title ) ); } Title.setupWithViewPager( viewPager ); viewPager.setAdapter( adapter );
注册界面
一、创建两个Drawable文件
其一
其二
二、将其添加数组内
private final int[] Identity = {R.drawable.press_oval_textview,R.drawable.notpress_oval_textview};
三、动态变化背景
private void SelectStudent(){ mIdentity_Student.setBackgroundResource( Identity[0] ); mIdentity_Teacher.setBackgroundResource( Identity[1] ); } private void SelectTeacher(){ mIdentity_Student.setBackgroundResource( Identity[1] ); mIdentity_Teacher.setBackgroundResource( Identity[0] ); }
考勤界面
主要是通过绘制一个圆,圆环、内圆、文字分别使用不同的背景颜色,并将修改背景颜色的接口暴露出来。
一、CircleProgressBar代码如下
public class CircleProgressBar extends View { // 画实心圆的画笔 private Paint mCirclePaint; // 画圆环的画笔 private Paint mRingPaint; // 画圆环的画笔背景色 private Paint mRingPaintBg; // 画字体的画笔 private Paint mTextPaint; // 圆形颜色 private int mCircleColor; // 圆环颜色 private int mRingColor; // 圆环背景颜色 private int mRingBgColor; // 半径 private float mRadius; // 圆环半径 private float mRingRadius; // 圆环宽度 private float mStrokeWidth; // 圆心x坐标 private int mXCenter; // 圆心y坐标 private int mYCenter; // 字的长度 private float mTxtWidth; // 字的高度 private float mTxtHeight; // 总进度 private int mTotalProgress = 100; // 当前进度 private double mProgress; public CircleProgressBar(Context context) { super( context ); } public CircleProgressBar(Context context, @Nullable AttributeSet attrs) { super( context, attrs ); initAttrs(context,attrs); initVariable(); } public CircleProgressBar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super( context, attrs, defStyleAttr ); } private void initAttrs(Context context, AttributeSet attrs) { TypedArray typeArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.TasksCompletedView, 0, 0); mRadius = typeArray.getDimension(R.styleable.TasksCompletedView_radius, 80); mStrokeWidth = typeArray.getDimension(R.styleable.TasksCompletedView_strokeWidth, 10); mCircleColor = typeArray.getColor(R.styleable.TasksCompletedView_circleColor, 0xFFFFFFFF); mRingColor = typeArray.getColor(R.styleable.TasksCompletedView_ringColor, 0xFFFFFFFF); mRingBgColor = typeArray.getColor(R.styleable.TasksCompletedView_ringBgColor, 0xFFFFFFFF); mRingRadius = mRadius + mStrokeWidth / 2; } private void initVariable() { //内圆 mCirclePaint = new Paint(); mCirclePaint.setAntiAlias(true); mCirclePaint.setColor(mCircleColor); mCirclePaint.setStyle(Paint.Style.FILL); //外圆弧背景 mRingPaintBg = new Paint(); mRingPaintBg.setAntiAlias(true); mRingPaintBg.setColor(mRingBgColor); mRingPaintBg.setStyle(Paint.Style.STROKE); mRingPaintBg.setStrokeWidth(mStrokeWidth); //外圆弧 mRingPaint = new Paint(); mRingPaint.setAntiAlias(true); mRingPaint.setColor(mRingColor); mRingPaint.setStyle(Paint.Style.STROKE); mRingPaint.setStrokeWidth(mStrokeWidth); //mRingPaint.setStrokeCap(Paint.Cap.ROUND);//设置线冒样式,有圆 有方 //中间字 mTextPaint = new Paint(); mTextPaint.setAntiAlias(true); mTextPaint.setStyle(Paint.Style.FILL); mTextPaint.setColor(mRingColor); mTextPaint.setTextSize(mRadius / 2); Paint.FontMetrics fm = mTextPaint.getFontMetrics(); mTxtHeight = (int) Math.ceil(fm.descent - fm.ascent); } @Override protected void onDraw(Canvas canvas) { super.onDraw( canvas ); mXCenter = getWidth() / 2; mYCenter = getHeight() / 2; //内圆 canvas.drawCircle( mXCenter, mYCenter, mRadius, mCirclePaint ); //外圆弧背景 RectF oval1 = new RectF(); oval1.left = (mXCenter - mRingRadius); oval1.top = (mYCenter - mRingRadius); oval1.right = mRingRadius * 2 + (mXCenter - mRingRadius); oval1.bottom = mRingRadius * 2 + (mYCenter - mRingRadius); canvas.drawArc( oval1, 0, 360, false, mRingPaintBg ); //圆弧所在的椭圆对象、圆弧的起始角度、圆弧的角度、是否显示半径连线 //外圆弧 if (mProgress > 0) { RectF oval = new RectF(); oval.left = (mXCenter - mRingRadius); oval.top = (mYCenter - mRingRadius); oval.right = mRingRadius * 2 + (mXCenter - mRingRadius); oval.bottom = mRingRadius * 2 + (mYCenter - mRingRadius); canvas.drawArc( oval, -90, ((float) mProgress / mTotalProgress) * 360, false, mRingPaint ); // //字体 String txt = mProgress + "%"; mTxtWidth = mTextPaint.measureText( txt, 0, txt.length() ); canvas.drawText( txt, mXCenter - mTxtWidth / 2, mYCenter + mTxtHeight / 4, mTextPaint ); } } //设置进度 public void setProgress(double progress) { mProgress = progress; postInvalidate();//重绘 } public void setCircleColor(int Color){ mRingPaint.setColor( Color ); postInvalidate();//重绘 }}
签到界面
签到界面就倒计时和位置签到
一、倒计时
采用的是Thread+Handler
在子线程内总共发生两种标志至Handler内,0x00表示倒计时未完成,0x01表示倒计时完成。
private void CountDown(){ new Thread( ){ @Override public void run() { super.run(); for (int j = 14; j >= 0 ; j--) { for (int i = 59; i >= 0; i--) { Message message = handler.obtainMessage(); message.what = 0x00; message.arg1 = i; message.arg2 = j; handler.sendMessage( message ); try { Thread.sleep( 1000 ); } catch (InterruptedException e) { e.printStackTrace(); } } } Message message = handler.obtainMessage( ); message.what = 0x01; handler.sendMessage( message ); } }.start(); }
final Handler handler = new Handler( ){ @Override public void handleMessage(@NonNull Message msg) { super.handleMessage( msg ); switch (msg.what){ case 0x00: if (msg.arg2 >= 10){ SignInMinutes.setText( msg.arg2+":" ); }else if (msg.arg2 < 10 && msg.arg2 > 0){ SignInMinutes.setText( "0"+msg.arg2+":" ); }else { SignInMinutes.setText( "00"+":" ); } if (msg.arg1 >= 10){ SignInSeconds.setText( msg.arg1+"" ); }else if (msg.arg1 < 10 && msg.arg1 > 0){ SignInSeconds.setText( "0"+msg.arg1 ); }else { SignInSeconds.setText( "00" ); } break; case 0x01: SignInSeconds.setText( "00" ); SignInMinutes.setText( "00:" ); break; } } };
二、位置签到
位置签到采用的是百度地图SDK
public class LocationCheckIn extends AppCompatActivity { private MapView BaiDuMapView; private TextView CurrentPosition,mLatitude,mLongitude,CurrentDate,SignInPosition; private Button SubmitMessage,SuccessSignIn; private ImageView LocationSignIn_Exit; private View view = null; private PopupWindow mPopupWindow; private LocationClient client; private BaiduMap mBaiduMap; private double Latitude = 0; private double Longitude = 0; private boolean isFirstLocate = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate( savedInstanceState ); if (Build.VERSION.SDK_INT >= 21) { View decorView = getWindow().getDecorView(); decorView.setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE ); getWindow().setStatusBarColor( Color.TRANSPARENT ); } SDKInitializer.initialize( getApplicationContext() ); client = new LocationClient( getApplicationContext() );//获取全局Context client.registerLocationListener( new MyBaiDuMap() );//注册一个定位监听器,获取位置信息,回调此定位监听器 setContentView( R.layout.activity_location_check_in ); InitView(); InitBaiDuMap(); InitPermission(); InitPopWindows(); Listener(); } private void InitView(){ BaiDuMapView = findViewById( R.id.BaiDu_MapView ); CurrentPosition = findViewById( R.id.CurrentPosition ); SubmitMessage = findViewById( R.id.SubmitMessage ); mLatitude = findViewById( R.id.Latitude ); mLongitude = findViewById( R.id.Longitude ); LocationSignIn_Exit = findViewById( R.id.LocationSignIn_Exit ); } private void InitPopWindows(){ view = LayoutInflater.from( LocationCheckIn.this ).inflate( R.layout.signin_success ,null,false); CurrentDate = view.findViewById( R.id.CurrentDate ); SignInPosition = view.findViewById( R.id.SignInPosition ); SuccessSignIn = view.findViewById( R.id.Success); mPopupWindow = new PopupWindow( view, ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT ); mPopupWindow.setFocusable( true ); //获取焦点 mPopupWindow.setBackgroundDrawable( new BitmapDrawable() ); mPopupWindow.setOutsideTouchable( true ); //点击外面地方,取消 mPopupWindow.setTouchable( true ); //允许点击 mPopupWindow.setAnimationStyle( R.style.MyPopupWindow ); //设置动画 Calendar calendar = Calendar.getInstance(); int Hour = calendar.get( Calendar.HOUR_OF_DAY ); int Minute = calendar.get( Calendar.MINUTE ); String sHour,sMinute; if (Hour < 10){ sHour = "0"+Hour; }else { sHour = ""+Hour; } if (Minute < 10){ sMinute = "0"+Minute; }else { sMinute = ""+Minute; } CurrentDate.setText( sHour+":"+sMinute ); //SignInPosition.setText( Position+"000"); SuccessSignIn.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { mPopupWindow.dismiss(); } } ); } private void ShowPopWindows(){ mPopupWindow.showAtLocation( view, Gravity.CENTER,0,0 ); } private void InitBaiDuMap(){ /*百度地图初始化*/ mBaiduMap = BaiDuMapView.getMap();//获取实例,可以对地图进行一系列操作,比如:缩放范围,移动地图 mBaiduMap.setMyLocationEnabled(true);//允许当前设备显示在地图上 } private void navigateTo(BDLocation location){ if (isFirstLocate){ LatLng lng = new LatLng(location.getLatitude(),location.getLongitude());//指定经纬度 MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(lng); mBaiduMap.animateMapStatus(update); update = MapStatusUpdateFactory.zoomTo(16f);//百度地图缩放级别限定在3-19 mBaiduMap.animateMapStatus(update); isFirstLocate = false; } MyLocationData.Builder builder = new MyLocationData.Builder(); builder.latitude(location.getLatitude());//纬度 builder.longitude(location.getLongitude());//经度 MyLocationData locationData = builder.build(); mBaiduMap.setMyLocationData(locationData); } private void InitPermission(){ ListPermissionList = new ArrayList<>(); //判断权限是否授权 if (ContextCompat.checkSelfPermission( LocationCheckIn.this, Manifest.permission.ACCESS_FINE_LOCATION ) != PackageManager.PERMISSION_GRANTED) { PermissionList.add( Manifest.permission.ACCESS_FINE_LOCATION ); } if (ContextCompat.checkSelfPermission( LocationCheckIn.this, Manifest.permission.READ_PHONE_STATE ) != PackageManager.PERMISSION_GRANTED) { PermissionList.add( Manifest.permission.READ_PHONE_STATE ); } if (ContextCompat.checkSelfPermission( LocationCheckIn.this, Manifest.permission.WRITE_EXTERNAL_STORAGE ) != PackageManager.PERMISSION_GRANTED) { PermissionList.add( Manifest.permission.WRITE_EXTERNAL_STORAGE ); } if (!PermissionList.isEmpty()) { String[] Permissions = PermissionList.toArray( new String[PermissionList.size()] );//转化为数组 ActivityCompat.requestPermissions( LocationCheckIn.this, Permissions, 1 );//一次性申请权限 } else { /*****************如果权限都已经声明,开始配置参数*****************/ requestLocation(); } } //执行 private void requestLocation(){ initLocation(); client.start(); } /*******************初始化百度地图各种参数*******************/ public void initLocation() { LocationClientOption option = new LocationClientOption(); option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); /**可选,设置定位模式,默认高精度LocationMode.Hight_Accuracy:高精度; * LocationMode. Battery_Saving:低功耗;LocationMode. Device_Sensors:仅使用设备;*/ option.setCoorType("bd09ll"); /**可选,设置返回经纬度坐标类型,默认gcj02gcj02:国测局坐标;bd09ll:百度经纬度坐标;bd09:百度墨卡托坐标; 海外地区定位,无需设置坐标类型,统一返回wgs84类型坐标*/ option.setScanSpan(3000); /**可选,设置发起定位请求的间隔,int类型,单位ms如果设置为0,则代表单次定位,即仅定位一次,默认为0如果设置非0,需设置1000ms以上才有效*/ option.setOpenGps(true); /**可选,设置是否使用gps,默认false使用高精度和仅用设备两种定位模式的,参数必须设置为true*/ option.setLocationNotify(true); /**可选,设置是否当GPS有效时按照1S/1次频率输出GPS结果,默认false*/ option.setIgnoreKillProcess(false); /**定位SDK内部是一个service,并放到了独立进程。设置是否在stop的时候杀死这个进程,默认(建议)不杀死,即setIgnoreKillProcess(true)*/ option.SetIgnoreCacheException(false); /**可选,设置是否收集Crash信息,默认收集,即参数为false*/ option.setIsNeedAltitude(true);/**设置海拔高度*/ option.setWifiCacheTimeOut(5 * 60 * 1000); /**可选,7.2版本新增能力如果设置了该接口,首次启动定位时,会先判断当前WiFi是否超出有效期,若超出有效期,会先重新扫描WiFi,然后定位*/ option.setEnableSimulateGps(false); /**可选,设置是否需要过滤GPS仿真结果,默认需要,即参数为false*/ option.setIsNeedAddress(true); /**可选,设置是否需要地址信息,默认不需要*/ client.setLocOption(option); /**mLocationClient为第二步初始化过的LocationClient对象需将配置好的LocationClientOption对象,通过setLocOption方法传递给LocationClient对象使用*/ } class MyBaiDuMap implements BDLocationListener { @Override public void onReceiveLocation(BDLocation bdLocation) { Latitude = bdLocation.getLatitude();//获取纬度 Longitude = bdLocation.getLongitude();//获取经度 mLatitude.setText( Latitude+"" ); mLongitude.setText( Longitude+"" ); double Radius = bdLocation.getRadius(); if (bdLocation.getLocType() == BDLocation.TypeGpsLocation || bdLocation.getLocType() == BDLocation.TypeNetWorkLocation){ navigateTo(bdLocation); } //StringBuilder currentPosition = new StringBuilder(); StringBuilder currentCity = new StringBuilder( ); StringBuilder Position = new StringBuilder( ); //currentPosition.append("纬度:").append(bdLocation.getLatitude()).append("\n"); // currentPosition.append("经度:").append(bdLocation.getLongitude()).append("\n"); /* currentPosition.append("国家:").append(bdLocation.getCountry()).append("\n"); currentPosition.append("省:").append(bdLocation.getProvince()).append("\n"); currentPosition.append("市/县:").append(bdLocation.getCity()).append("\n"); currentPosition.append("区/乡:").append(bdLocation.getDistrict()).append("\n"); currentPosition.append("街道/村:").append(bdLocation.getStreet()).append("\n");*/// currentPosition.append("定位方式:"); //currentPosition.append( bdLocation.getProvince() ); // Position.append( bdLocation.getCity() ); Position.append( bdLocation.getDistrict() ); Position.append( bdLocation.getStreet() ); currentCity.append( bdLocation.getProvince() ); currentCity.append( bdLocation.getCity() ); currentCity.append( bdLocation.getDistrict() ); currentCity.append( bdLocation.getStreet() ); /*if (bdLocation.getLocType() == BDLocation.TypeGpsLocation){ //currentPosition.append("GPS"); }else if (bdLocation.getLocType() == BDLocation.TypeNetWorkLocation){ //currentPosition.append("网络"); }*/ /* currentCity.append( bdLocation.getCity() );*/ //mUpdatePosition = currentPosition+""; CurrentPosition.setText( currentCity ); SignInPosition.setText( Position); //Position = CurrentPosition.getText().toString()+""; //Function_CityName.setText( currentCity ); } } private void Listener(){ OnClick onClick = new OnClick(); SubmitMessage.setOnClickListener( onClick ); LocationSignIn_Exit.setOnClickListener( onClick ); } class OnClick implements View.OnClickListener{ @Override public void onClick(View v) { switch (v.getId()){ case R.id.SubmitMessage: ShowPopWindows(); break; case R.id.LocationSignIn_Exit: startActivity( new Intent( LocationCheckIn.this,SignIn.class ) ); } } }}
成绩查询界面
采用的是MD的CardStackView,需要实现一个Adapter适配器,此适配器与RecyclerView适配器构建类似
一、创建StackAdapter 适配器
package com.franzliszt.Student.QueryScore;public class StackAdapter extends com.loopeer.cardstack.StackAdapter{ public StackAdapter(Context context) { super(context); } @Override public void bindView(Integer data, int position, CardStackView.ViewHolder holder) { if (holder instanceof ColorItemLargeHeaderViewHolder) { ColorItemLargeHeaderViewHolder h = (ColorItemLargeHeaderViewHolder) holder; h.onBind(data, position); } if (holder instanceof ColorItemWithNoHeaderViewHolder) { ColorItemWithNoHeaderViewHolder h = (ColorItemWithNoHeaderViewHolder) holder; h.onBind(data, position); } if (holder instanceof ColorItemViewHolder) { ColorItemViewHolder h = (ColorItemViewHolder) holder; h.onBind(data, position); } } @Override protected CardStackView.ViewHolder onCreateView(ViewGroup parent, int viewType) { View view; switch (viewType) { case R.layout.list_card_item_larger_header: view = getLayoutInflater().inflate(R.layout.list_card_item_larger_header, parent, false); return new ColorItemLargeHeaderViewHolder(view); case R.layout.list_card_item_with_no_header: view = getLayoutInflater().inflate(R.layout.list_card_item_with_no_header, parent, false); return new ColorItemWithNoHeaderViewHolder(view); case R.layout.other_item: view = getLayoutInflater().inflate(R.layout.other_item, parent, false); return new ColorItemViewHolder(view); case R.layout.other_item_thank: view = getLayoutInflater().inflate(R.layout.other_item_thank, parent, false); return new ColorItemViewHolder(view); case R.layout.other_item_note_1: view = getLayoutInflater().inflate(R.layout.other_item_note_1, parent, false); return new ColorItemViewHolder(view); case R.layout.other_item_note_2: view = getLayoutInflater().inflate(R.layout.other_item_note_2, parent, false); return new ColorItemViewHolder(view); default: view = getLayoutInflater().inflate(R.layout.first_semester, parent, false); return new ColorItemViewHolder(view); } } @Override public int getItemViewType(int position) { if (position == 6 ){//TODO TEST LARGER ITEM return R.layout.other_item; } else if (position == 7){ return R.layout.other_item_thank; }else if (position == 8){ return R.layout.other_item_note_1; }else if (position == 9){ return R.layout.other_item_note_2; } else { return R.layout.first_semester; } } static class ColorItemViewHolder extends CardStackView.ViewHolder { View mLayout; View mContainerContent; TextView mTextTitle; TextView ClassName1,ClassStatus1,ClassMethod1,ClassFlag1,Credit1,GradePoint1; TextView ClassName2,ClassStatus2,ClassMethod2,ClassFlag2,Credit2,GradePoint2; TextView ClassName3,ClassStatus3,ClassMethod3,ClassFlag3,Credit3,GradePoint3; TextView ClassName4,ClassStatus4,ClassMethod4,ClassFlag4,Credit4,GradePoint4; TextView TitleContent,MoreInfo; public ColorItemViewHolder(View view) { super(view); mLayout = view.findViewById(R.id.frame_list_card_item); mContainerContent = view.findViewById(R.id.container_list_content); mTextTitle = view.findViewById(R.id.text_list_card_title); TitleContent = view.findViewById( R.id.TitleContent ); MoreInfo = view.findViewById( R.id.MoreInfo ); ClassName1 = view.findViewById(R.id.ClassName1); ClassStatus1 = view.findViewById(R.id.ClassStatus1); ClassMethod1 = view.findViewById(R.id.ClassMethod1); ClassFlag1 = view.findViewById(R.id.ClassFlag1); Credit1 = view.findViewById(R.id.Credit1); GradePoint1= view.findViewById(R.id.GradePoint1); ClassName2 = view.findViewById(R.id.ClassName2); ClassStatus2 = view.findViewById(R.id.ClassStatus2); ClassMethod2 = view.findViewById(R.id.ClassMethod2); ClassFlag2 = view.findViewById(R.id.ClassFlag2); Credit2 = view.findViewById(R.id.Credit2); GradePoint2= view.findViewById(R.id.GradePoint2); ClassName3 = view.findViewById(R.id.ClassName3); ClassStatus3 = view.findViewById(R.id.ClassStatus3); ClassMethod3 = view.findViewById(R.id.ClassMethod3); ClassFlag3 = view.findViewById(R.id.ClassFlag3); Credit3 = view.findViewById(R.id.Credit3); GradePoint3= view.findViewById(R.id.GradePoint3); ClassName4 = view.findViewById(R.id.ClassName4); ClassStatus4 = view.findViewById(R.id.ClassStatus4); ClassMethod4 = view.findViewById(R.id.ClassMethod4); ClassFlag4 = view.findViewById(R.id.ClassFlag4); Credit4 = view.findViewById(R.id.Credit4); GradePoint4 = view.findViewById(R.id.GradePoint4); } @Override public void onItemExpand(boolean b) { mContainerContent.setVisibility(b ? View.VISIBLE : View.GONE); } public void onBind(Integer data, int position) { mLayout.getBackground().setColorFilter( ContextCompat.getColor(getContext(), data), PorterDuff.Mode.SRC_IN); //mTextTitle.setText( String.valueOf(position)); if (position == 0){ mTextTitle.setText( "2019-2020第一学期"); ClassName1.setText( "物联网概论" ); ClassStatus1.setText( "必修课" ); ClassFlag1.setText( "辅修标记: 主修" ); ClassMethod1.setText( "考核方式: 考试" ); Credit1.setText( "学分: 3.0" ); GradePoint1.setText( "绩点: 3.0" ); ClassName2.setText( "应用数学" ); ClassStatus2.setText( "必修课" ); ClassFlag2.setText( "辅修标记: 主修" ); ClassMethod2.setText( "考核方式: 考试" ); Credit2.setText( "学分: 3.0" ); GradePoint2.setText( "绩点: 2.0" ); ClassName3.setText( "大学英语" ); ClassStatus3.setText( "必修课" ); ClassFlag3.setText( "辅修标记: 主修" ); ClassMethod3.setText( "考核方式: 考试" ); Credit3.setText( "学分: 3.0" ); GradePoint3.setText( "绩点: 1.0" ); ClassName4.setText( "军事理论" ); ClassStatus4.setText( "选修课" ); ClassFlag4.setText( "辅修标记: 主修" ); ClassMethod4.setText( "考核方式: 考查" ); Credit4.setText( "学分: 2.0" ); GradePoint4.setText( "绩点: 3.0" ); }else if (position == 1){ mTextTitle.setText( "2019-2020第二学期"); ClassName1.setText( "电子技术" ); ClassStatus1.setText( "必修课" ); ClassFlag1.setText( "辅修标记: 主修" ); ClassMethod1.setText( "考核方式: 考试" ); Credit1.setText( "学分: 4.0" ); GradePoint1.setText( "绩点: 3.0" ); ClassName2.setText( "C语言程序设计" ); ClassStatus2.setText( "必修课" ); ClassFlag2.setText( "辅修标记: 主修" ); ClassMethod2.setText( "考核方式: 考试" ); Credit2.setText( "学分: 2.0" ); GradePoint2.setText( "绩点: 4.0" ); ClassName3.setText( "大学体育" ); ClassStatus3.setText( "必修课" ); ClassFlag3.setText( "辅修标记: 主修" ); ClassMethod3.setText( "考核方式: 考试" ); Credit3.setText( "学分: 1.5" ); GradePoint3.setText( "绩点: 3.0" ); ClassName4.setText( "音乐鉴赏" ); ClassStatus4.setText( "选修课" ); ClassFlag4.setText( "辅修标记: 主修" ); ClassMethod4.setText( "考核方式: 考查" ); Credit4.setText( "学分: 1.5" ); GradePoint4.setText( "绩点: 3.0" ); }else if (position == 2){ mTextTitle.setText( "2020-2021第一学期"); ClassName1.setText( "单片机技术应用" ); ClassStatus1.setText( "必修课" ); ClassFlag1.setText( "辅修标记: 主修" ); ClassMethod1.setText( "考核方式: 考试" ); Credit1.setText( "学分: 4.5" ); GradePoint1.setText( "绩点: 4.0" ); ClassName2.setText( "JAVA程序设计" ); ClassStatus2.setText( "必修课" ); ClassFlag2.setText( "辅修标记: 主修" ); ClassMethod2.setText( "考核方式: 考试" ); Credit2.setText( "学分: 1.0" ); GradePoint2.setText( "绩点: 3.0" ); ClassName3.setText( "自动识别技术" ); ClassStatus3.setText( "必修课" ); ClassFlag3.setText( "辅修标记: 主修" ); ClassMethod3.setText( "考核方式: 考试" ); Credit3.setText( "学分: 4.5" ); GradePoint3.setText( "绩点: 4.0" ); ClassName4.setText( "文化地理" ); ClassStatus4.setText( "选修课" ); ClassFlag4.setText( "辅修标记: 主修" ); ClassMethod4.setText( "考核方式: 考查" ); Credit4.setText( "学分: 1.0" ); GradePoint4.setText( "绩点: 4.0" ); }else if (position == 3){ mTextTitle.setText( "2020-2021第二学期"); ClassName1.setText( "Android程序设计" ); ClassStatus1.setText( "必修课" ); ClassFlag1.setText( "辅修标记: 主修" ); ClassMethod1.setText( "考核方式: 考试" ); Credit1.setText( "学分: 1.0" ); GradePoint1.setText( "绩点: 4.0" ); ClassName2.setText( "无线传感网络技术" ); ClassStatus2.setText( "必修课" ); ClassFlag2.setText( "辅修标记: 主修" ); ClassMethod2.setText( "考核方式: 考试" ); Credit2.setText( "学分: 1.0" ); GradePoint2.setText( "绩点: 4.0" ); ClassName3.setText( "体育" ); ClassStatus3.setText( "必修课" ); ClassFlag3.setText( "辅修标记: 主修" ); ClassMethod3.setText( "考核方式: 考试" ); Credit3.setText( "学分: 1.5" ); GradePoint3.setText( "绩点: 3.0" ); ClassName4.setText( "有效沟通技巧" ); ClassStatus4.setText( "选修课" ); ClassFlag4.setText( "辅修标记: 主修" ); ClassMethod4.setText( "考核方式: 考查" ); Credit4.setText( "学分: 1.5" ); GradePoint4.setText( "绩点: 3.0" ); }else if (position == 4){ mTextTitle.setText( "2021-2022第一学期"); ClassName1.setText( "物联网概论" ); ClassStatus1.setText( "必修课" ); ClassFlag1.setText( "辅修标记: 主修" ); ClassMethod1.setText( "考核方式: 考试" ); Credit1.setText( "学分: 3.0" ); GradePoint1.setText( "绩点: 3.0" ); ClassName2.setText( "应用数学" ); ClassStatus2.setText( "必修课" ); ClassFlag2.setText( "辅修标记: 主修" ); ClassMethod2.setText( "考核方式: 考试" ); Credit2.setText( "学分: 3.0" ); GradePoint2.setText( "绩点: 2.0" ); ClassName3.setText( "大学英语" ); ClassStatus3.setText( "必修课" ); ClassFlag3.setText( "辅修标记: 主修" ); ClassMethod3.setText( "考核方式: 考试" ); Credit3.setText( "学分: 3.0" ); GradePoint3.setText( "绩点: 1.0" ); ClassName4.setText( "军事理论" ); ClassStatus4.setText( "必修课" ); ClassFlag4.setText( "辅修标记: 主修" ); ClassMethod4.setText( "考核方式: 考查" ); Credit4.setText( "学分: 2.0" ); GradePoint4.setText( "绩点: 3.0" ); }else if (position == 5){ mTextTitle.setText( "2021-2022第二学期"); ClassName1.setText( "物联网概论" ); ClassStatus1.setText( "必修课" ); ClassFlag1.setText( "辅修标记: 主修" ); ClassMethod1.setText( "考核方式: 考试" ); Credit1.setText( "学分: 3.0" ); GradePoint1.setText( "绩点: 3.0" ); ClassName2.setText( "应用数学" ); ClassStatus2.setText( "必修课" ); ClassFlag2.setText( "辅修标记: 主修" ); ClassMethod2.setText( "考核方式: 考试" ); Credit2.setText( "学分: 3.0" ); GradePoint2.setText( "绩点: 2.0" ); ClassName3.setText( "大学英语" ); ClassStatus3.setText( "必修课" ); ClassFlag3.setText( "辅修标记: 主修" ); ClassMethod3.setText( "考核方式: 考试" ); Credit3.setText( "学分: 3.0" ); GradePoint3.setText( "绩点: 1.0" ); ClassName4.setText( "军事理论" ); ClassStatus4.setText( "必修课" ); ClassFlag4.setText( "辅修标记: 主修" ); ClassMethod4.setText( "考核方式: 考查" ); Credit4.setText( "学分: 2.0" ); GradePoint4.setText( "绩点: 3.0" ); }else if (position == 6){ mTextTitle.setText( "毕业设计"); }else if (position == 7){ mTextTitle.setText( "致谢"); }else if (position == 8){ mTextTitle.setText( "校园杂记一"); }else if (position == 9){ mTextTitle.setText( "校园杂记二"); }else { mTextTitle.setText( String.valueOf(position)); } } } static class ColorItemWithNoHeaderViewHolder extends CardStackView.ViewHolder { View mLayout; TextView mTextTitle; public ColorItemWithNoHeaderViewHolder(View view) { super(view); mLayout = view.findViewById(R.id.frame_list_card_item); mTextTitle = (TextView) view.findViewById(R.id.text_list_card_title); } @Override public void onItemExpand(boolean b) { } public void onBind(Integer data, int position) { mLayout.getBackground().setColorFilter(ContextCompat.getColor(getContext(), data), PorterDuff.Mode.SRC_IN); mTextTitle.setText( String.valueOf(position)); } } static class ColorItemLargeHeaderViewHolder extends CardStackView.ViewHolder { View mLayout; View mContainerContent; TextView mTextTitle; public ColorItemLargeHeaderViewHolder(View view) { super(view); mLayout = view.findViewById(R.id.frame_list_card_item); mContainerContent = view.findViewById(R.id.container_list_content); mTextTitle = view.findViewById(R.id.text_list_card_title); } @Override public void onItemExpand(boolean b) { mContainerContent.setVisibility(b ? View.VISIBLE : View.GONE); } @Override protected void onAnimationStateChange(int state, boolean willBeSelect) { super.onAnimationStateChange(state, willBeSelect); if (state == CardStackView.ANIMATION_STATE_START && willBeSelect) { onItemExpand(true); } if (state == CardStackView.ANIMATION_STATE_END && !willBeSelect) { onItemExpand(false); } } public void onBind(Integer data, int position) { mLayout.getBackground().setColorFilter(ContextCompat.getColor(getContext(), data), PorterDuff.Mode.SRC_IN); mTextTitle.setText( String.valueOf(position)); mTextTitle.setText( "2019-2020第一学期"); itemView.findViewById(R.id.text_view).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ((CardStackView)itemView.getParent()).performItemClick(ColorItemLargeHeaderViewHolder.this); } }); } }}
二、绑定适配器
QueryScoreCardStackView.setItemExpendListener( this ); adapter = new StackAdapter( this ); QueryScoreCardStackView.setAdapter( adapter );
三、为每一个子项添加背景色
public static Integer[] COLOR_DATAS = new Integer[]{ R.color.color_1, R.color.color_2, R.color.color_3, R.color.color_4, R.color.color_5, R.color.color_6, R.color.color_7, R.color.color_8, R.color.color_9, R.color.color_10, };
new Handler( ).postDelayed( new Runnable() { @Override public void run() { adapter.updateData( Arrays.asList( COLOR_DATAS ) ); } } ,200);
"怎么用Android开发一个学生管理系统"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
方式
学分
标记
考核
必修课
必修
考试
定位
坐标
背景
圆弧
圆环
地图
学期
界面
适配器
适配
考查
有效
参数
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
明日之后服务器连接不上怎么回事
服务器出现故障黑屏怎么回事
医院网络安全检查工作总结
网络安全与信息化测试考什么
erp项目云服务器选择
王者荣耀哪里有服务器终端
车型数据库详解
通信网络技术及其发展趋势
数据库识别基础知识
网络安全基本的漏洞有什么
中国工商银行软件开发算正式工吗
肿瘤耐药数据库挖掘
阳新卫生局数据库恢复
分布式数据库技术有哪些
如何知道一个软件的服务器地址
航天金税盘代理服务器怎么设置
新时代铁路网络安全工作
网络安全认证0证书
网络安全动态防御技术的缺点
总控管理服务器报价
软件开发阶段不需要做什么
消费金融平台软件开发
湖北视频会议服务器云空间
大兴区智能网络技术品质保障
绝世仙王服务器爆满怎么进去
西瓜视频服务器的地址
天津服务器续保一年多少钱
湖南统一软件开发价格标准
为什么内网不能用公网ip服务器
智能语音服务器制作企业