我的上一篇博客http://blog.csdn.net/callmesp/article/details/52895630 讲的是ListView和RecyclerView,起因就是想开发一个便签的时候才遇到的问题。在学习了RecyclerView之后呢,在今天上午花了一段时间把这个app写了出来(水平有限),来与大家分享。

项目地址为

https://github.com/CallMeSp/Notes_2.git
先上整体的界面图吧。

看起来还行吧..不算太丑。
然后是结构图。

接下来上代码了。先上recycle_new

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:fitsSystemWindows="true"tools:context="com.example.notes_2.MainActivity"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><android.support.design.widget.AppBarLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:theme="@style/AppTheme.AppBarOverlay"android:id="@+id/aaa"><android.support.v7.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:background="?attr/colorPrimary"app:popupTheme="@style/AppTheme.PopupOverlay" /></android.support.design.widget.AppBarLayout><android.support.v7.widget.RecyclerViewandroid:layout_below="@+id/aaa"android:id="@+id/recycle"android:layout_width="fill_parent"android:layout_height="match_parent"android:layout_weight="1"></android.support.v7.widget.RecyclerView><android.support.design.widget.FloatingActionButtonandroid:id="@+id/fab"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="bottom|end"android:src="@android:drawable/ic_menu_add"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true" /></RelativeLayout>
</android.support.design.widget.CoordinatorLayout>

前面的AppBarLayout就是创建project时候自动生成的不用去管它,也可以在toolbar上设置一个按钮来增添一个编辑功能(这个功能还没实现,目前还没学会..等实现了再回来写一个Android开发–便签(二),有什么建议的话也可以告诉我)。下面两个控件就是重点了,一个RecyclerView负责显示信息和一个FloatingActionButton悬浮的按钮来触发增加便签的事件。不明白的可以看我上一篇博客这里就不详细的说了。
下面是list_item

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="wrap_content"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"app:layout_behavior="@string/appbar_scrolling_view_behavior"tools:context="com.example.notes_2.MainActivity"android:orientation="vertical">
<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="wrap_content"card_view:cardBackgroundColor="#FFFFB9"card_view:cardCornerRadius="10dp"card_view:cardPreventCornerOverlap="true"card_view:cardUseCompatPadding="true"card_view:contentPadding="10dp"><LinearLayout
        android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"><TextView
        android:layout_width="wrap_content"android:layout_height="wrap_content"android:paddingLeft="10sp"android:paddingRight="10sp"android:paddingTop="15sp"android:singleLine="true"android:id="@+id/time" /><TextView
        android:id="@+id/content"android:layout_width="wrap_content"android:layout_height="wrap_content"android:ellipsize="end"android:paddingLeft="10sp"android:paddingRight="10sp"android:paddingTop="15sp"android:paddingBottom="15sp" /></LinearLayout>
</android.support.v7.widget.CardView>
</LinearLayout>

这里用了一个CardView

<android.support.v7.widget.CardViewxmlns:card_view="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="wrap_content"card_view:cardBackgroundColor="#FFFFB9"card_view:cardCornerRadius="10dp"card_view:cardPreventCornerOverlap="true"card_view:cardUseCompatPadding="true"card_view:contentPadding="10dp">

也是一个比较新的控件,这是今天才学会的,这里就是简单的调用一下,也没什么好说的,如果有时间的话会深入的研究一下,研究一下各种自定义,然后专门写一篇博客。现在,值得注意的一点就是我在里面嵌套了一个LinearLayout然后才在里面写了两个TextView,为什么要这样多此一举而不是直接就写两个TextView呢?这里其实我一开始也没加,不过在测试的时候发现两个TextView重合起来了,我感觉这个CardView就相当于一个改了style改了background的一个FrameLayout,所以要先嵌套然后再使用,总比什么都要自定义要方便的多了。然后两个TextView一个用来显示时间一个显示内容。
下面就开始上主要的内容了。
DBHelper.java

package com.example.notes_2;import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;import java.text.SimpleDateFormat;
import java.util.Date;/*** Created by my on 2016/10/23.*/
public class DBHelper extends SQLiteOpenHelper {private final static String DB_NAME="my.db";private final static int DB_VERSION=1;private final  static String TABLE_NAME="info";private final static String CONTENT="content";private final static String TIME="date";private final static String ID="_id";SQLiteDatabase database=getWritableDatabase();public DBHelper(Context context){super(context,DB_NAME,null,DB_VERSION);}//paramSQLiteDatabase.execSQL("create table " + NAME + "(id INTEGER PRIMARY KEY AUTOINCREMENT,title TEXT,date TEXT,content TEXT)");@Overridepublic void onCreate(SQLiteDatabase database){database.execSQL("create table " + TABLE_NAME + "(_id INTEGER PRIMARY KEY AUTOINCREMENT,date TEXT,content TEXT)");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}public long insert(String text){ContentValues contentValues=new ContentValues();contentValues.put("content",text);//获取系统时间SimpleDateFormat formatter=new SimpleDateFormat("yy-MM-dd HH:mm");Date curDate =  new Date(System.currentTimeMillis());String time=formatter.format(curDate);contentValues.put("date",time);long row=database.insert(TABLE_NAME,null,contentValues);Log.e("time:", time);Log.e("content", text);return row;}public void update(int _id,String text){ContentValues contentValues=new ContentValues();contentValues.put("content",text);database.update(TABLE_NAME,contentValues,ID+"=?",new String[]{Integer.toString(_id)});}public void delete(int _id){database.delete(TABLE_NAME, ID + "=?", new String[]{Integer.toString(_id)});}public Cursor select(){Cursor cursor=database.query(TABLE_NAME,null,null,null,null,null,null);return cursor;}
}
/*
public long add(SQLiteDatabase paramSQLiteDatabase, Notepad paramNotepad) {ContentValues localContentValues = new ContentValues();localContentValues.put("title", paramNotepad.getTitle());localContentValues.put("date", paramNotepad.getdata());localContentValues.put("content", paramNotepad.getContent());long l = paramSQLiteDatabase.insert(table, null, localContentValues);paramSQLiteDatabase.close();return l;}*/

这个就是这个项目的核心了,一个数据库帮助类,这里用的是SQLite一个轻量级数据库,后面我会专门详细的写一篇博客来讲它的。这里先简单的认识一下就可以。它有几个参数,也是在构造的时候需要的,数据库名字,数据库版本,表名,id,还有就是表里面的内容了,可以随意设置。

SQLiteDatabase database=getWritableDatabase();

这里用了一个基础类获取读写数据库的权限,否则是会闪退的。然后就是对它的各种功能的重写,添加,删除,插入,更新等等。放入内容的时候用了ContentValues,一个键值对。比如contentValues.put(“content”,text);就是把text的内容赋予表里面的“content”这一列。别的也没什么了。

然后是写一个适配器adpter来适配我们的RecyclerView。

package com.example.notes_2;import android.content.Context;
import android.database.Cursor;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;import java.util.List;/*** Created by my on 2016/10/23.*/
public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.MyViewHolder>  {private List<String> mDatas;private Context mContext;private LayoutInflater inflater;private Cursor mmcursor;private DBHelper mmDbhelper;int k=0;private OnItemClickListener mOnItemClickListener;public MyRecyclerAdapter(Context context,Cursor cursor,DBHelper dbHelper){this.mContext=context;this.mmcursor=cursor;this.mmDbhelper=dbHelper;inflater= LayoutInflater. from(mContext);}@Overridepublic int getItemCount() {return mmcursor.getCount();}//填充onCreateViewHolder方法返回的holder中的控件@Overridepublic void onBindViewHolder(MyViewHolder holder, final int position) {mmcursor.moveToPosition(mmcursor.getCount()-position-1);holder.tv_time.setText(mmcursor.getString(1));holder.tv_content.setText(mmcursor.getString(2));//实现接口if( mOnItemClickListener!= null){holder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mOnItemClickListener.onClick(position);}});}}//重写onCreateViewHolder方法,返回一个自定义的ViewHolder@Overridepublic MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view = inflater.inflate(R.layout.list_item,parent, false);MyViewHolder holder= new MyViewHolder(view);return holder;}class MyViewHolder extends RecyclerView.ViewHolder {TextView tv_time;TextView tv_content;public MyViewHolder(View view) {super(view);tv_time=(TextView)view.findViewById(R.id.time);tv_content=(TextView) view.findViewById(R.id.content);}}public interface OnItemClickListener{void onClick(int position);}public void setOnItemClickListener(OnItemClickListener onItemClickListener ){this. mOnItemClickListener=onItemClickListener;}
}

这里用到了cursor来适配这个DBHelper,后面讲SQLite的时候也会详细讲,这里只需要将它理解成指针就好了,然后从表里面取值的时候,用cursor.moveToPosition(int position);移动到那一行;然后cursor.getString(int x));移动到那一列,列的顺序就是atabase.execSQL(“create table ” + TABLE_NAME + “(_id INTEGER PRIMARY KEY AUTOINCREMENT,date TEXT,content TEXT)”);引号里面自己定义的顺序。从0开始。
接下来就是我们的MainActivity了。

package com.example.notes_2;import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.OrientationHelper;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {private ListView listView;private Cursor cursor;private DBHelper dbHelper;private RecyclerView recyclerView;private MyRecyclerAdapter adapter;private int _id=0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.revycle_new);dbHelper=new DBHelper(this);cursor=dbHelper.select();recyclerView=(RecyclerView)findViewById(R.id.recycle);adapter=new MyRecyclerAdapter(this,cursor,dbHelper);LinearLayoutManager layoutManager = new LinearLayoutManager(this);GridLayoutManager gridLayoutManager=new GridLayoutManager(this,2);StaggeredGridLayoutManager staggeredGridLayoutManager= new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);//设置布局管理器recyclerView.setLayoutManager(staggeredGridLayoutManager);//设置为垂直布局,这也是默认的layoutManager.setOrientation(OrientationHelper.VERTICAL);//设置AdapterrecyclerView.setAdapter(adapter);Log.e("0","getcount:"+adapter.getItemCount());//设置增加或删除条目的动画recyclerView.setItemAnimator(new DefaultItemAnimator());adapter.setOnItemClickListener(new MyRecyclerAdapter.OnItemClickListener() {@Overridepublic void onClick(int position) {cursor.moveToPosition(cursor.getCount()-1-position);_id=cursor.getInt(0);Intent intent=new Intent(MainActivity.this,Modify.class);intent.putExtra("id",_id);intent.putExtra("data",cursor.getString(2));//getString(1)显示cursor该列的内容Log.e("0","MainActivity to modify_contetn:"+cursor.getString(2));Log.e("0","id:"+_id);startActivity(intent);finish();}});Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);setSupportActionBar(toolbar);FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);fab.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent = new Intent(MainActivity.this,Content.class);startActivity(intent);}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.menu_main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();//noinspection SimplifiableIfStatementif (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}
}

逻辑很清晰就不用细讲了。还有就是点击增加便签的Activity还有点进便签的Activity下面把代码贴出来。
content.java

package com.example.notes_2;import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;import java.sql.Time;
import java.text.SimpleDateFormat;
import java.util.Date;/*** Created by my on 2016/10/23.*/
public class Content extends Activity implements View.OnClickListener {private Button okButton,cancleButton;private EditText contentWrite;private DBHelper dbHelper;private Cursor cursor;private int _id=0;private Time time;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.content);init();}private void init(){dbHelper=new DBHelper(this);cursor=dbHelper.select();okButton = (Button) findViewById(R.id.btn_ok);cancleButton = (Button) findViewById(R.id.btn_cancle);contentWrite = (EditText) findViewById(R.id.et_content);okButton.setOnClickListener(this);cancleButton.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_ok:addData() ;Intent intent = new Intent(this,MainActivity.class);startActivity(intent);finish();break;case R.id.btn_cancle:Intent intent1 = new Intent(this,MainActivity.class);startActivity(intent1);finish();break;}}private void addData(){if (contentWrite.getText().toString().equals("")){Toast.makeText(Content.this,"内容不能为空",Toast.LENGTH_SHORT).show();}else{dbHelper.insert(contentWrite.getText().toString());cursor.requery();contentWrite.setText("");_id=0;}}@Overridepublic boolean onKeyDown(int keycode,KeyEvent event){if (keycode==KeyEvent.KEYCODE_BACK){Intent intent = new Intent(this,MainActivity.class);startActivity(intent);finish();return true;}else{return super.onKeyDown(keycode,event);}}
}

效果图

modify.java

package com.example.notes_2;import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;/*** Created by my on 2016/10/23.*/
public class Modify extends Activity implements View.OnClickListener {private EditText et_show;private Button updateButton, deleteButton, backButton;private DBHelper dbHelper;private Cursor cursor;private int id;@Overrideprotected void onCreate(Bundle s) {super.onCreate(s);setContentView(R.layout.modify);init();}private void init() {et_show = (EditText) findViewById(R.id.et_modify);Intent intent = getIntent();String data = intent.getStringExtra("data");id = intent.getIntExtra("id", id);et_show.setText(data);dbHelper = new DBHelper(this);cursor = dbHelper.select();updateButton = (Button) findViewById(R.id.btn_update);deleteButton = (Button) findViewById(R.id.btn_delete);backButton = (Button) findViewById(R.id.btn_back);updateButton.setOnClickListener(this);deleteButton.setOnClickListener(this);backButton.setOnClickListener(this);}public void updateData() {if (id == 0) {Toast.makeText(Modify.this, "内容不能为空", Toast.LENGTH_SHORT).show();} else {dbHelper.update(id, et_show.getText().toString());cursor.requery();id = 0;}}public void deleteData(){if (id==0){Toast.makeText(Modify.this, "内容不能为空", Toast.LENGTH_SHORT).show();}else{dbHelper.delete(id);cursor.requery();id=0;}}@Overridepublic void onClick(View arg0) {switch (arg0.getId()) {case R.id.btn_update:updateData();Intent intent1 = new Intent(this,MainActivity.class);startActivity(intent1);finish();break;case R.id.btn_delete:deleteData();Intent intent = new Intent(this,MainActivity.class);startActivity(intent);finish();break;case R.id.btn_back:Intent intent2 = new Intent(this,MainActivity.class);startActivity(intent2);finish();break;}}@Overridepublic boolean onKeyDown(int keycode,KeyEvent event){if (keycode==KeyEvent.KEYCODE_BACK){Intent intent = new Intent(this,MainActivity.class);startActivity(intent);finish();return true;}else{return super.onKeyDown(keycode,event);}}
}


还有这两个activity的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:orientation="vertical" ><LinearLayout
        android:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="wrap_content"android:background="@color/colorPrimary"><Button
            android:id="@+id/btn_ok"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="完成"android:background="@color/colorPrimary"/><TextClock
            android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center"android:format12Hour="yyyy年dd月MM日 HH:mm"/><Button
            android:id="@+id/btn_cancle"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="取消"android:background="@color/colorPrimary"/></LinearLayout><EditText
        android:id="@+id/et_content"android:layout_width="fill_parent"android:layout_height="match_parent"android:hint="Type something here"/></LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><RelativeLayout
        android:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="wrap_content"android:background="@color/colorPrimary"android:id="@+id/xx"><Button
            android:id="@+id/btn_back"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="返回"android:background="@color/colorPrimary" /><TextClock
            android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:format12Hour="yy/dd/MM-HH:mm"/><Button
        android:id="@+id/btn_delete"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="删除"android:layout_alignParentRight="true"android:background="@color/colorPrimary" /></RelativeLayout><Button
        android:id="@+id/btn_update"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="保存"android:layout_alignParentBottom="true"android:background="@color/colorPrimary"/><EditText
        android:id="@+id/et_modify"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_below="@+id/xx"/></RelativeLayout>

这样就实现了一个简易的便签了。 与大家分享。

Android开发--便签(一)相关推荐

  1. Android开发便签APP

    1.设计知识: framelayout.floatingactionbutton.menu.listview.adapter.sqlite 2.开发工具: Android Studio 3.1.1 工 ...

  2. 基于Android的便签设计(二)

    承接基于Android的便签设计(一)链接: link. 便签功能的实现 参考设计: Android开发便签APP:https://blog.csdn.net/qq_38442065/article/ ...

  3. 便签 java_基于安卓Android的便签笔记APP设计(Android studio)

    基于安卓Android的便签笔记APP设计(Android studio)(论文9000字,程序代码) 摘要:本文介绍了便签的发展史.基础操作流程以及便签的具体功能,提出了基于Android的便签AP ...

  4. android studio便签需求介绍,Android我的便签-----SQLite的使用方法

    在Android开发中也有数据库的存在,最近有空,把以前写的一个便签来讲述一下Android中的数据库,跟大家分享分享的,希望对大家有所帮助. SQLite简介 SQLite,是一款轻量级的关系型数据 ...

  5. android日历便签,安卓手机上有日历与便签结合的app吗?

    原标题:安卓手机上有日历与便签结合的app吗? 现如今,手机便签app已经成为我们使用频率比较高的一款工具软件,因为在这个生活和工作节奏不断加快的大背景下,它正好可以满足我们及时记录待办事项.整理信息 ...

  6. 基于Android的便签设计(一)

    我最近在学习Android设计,想要实现一个简单的便签设计.真的是各种查资料啊,资料查的太多,翻看历史记录,好多都忘记是哪一个,于是写个笔记来记录一下自己逐步实现的功能,也方便自己使用.还是小白,功能 ...

  7. android studio便签需求介绍,便签攻略 - 这里有一份个性便签攻略,喜欢记便签的朋友可不能错过! - Android 应用 - 工具 - 【最美应用】...

    文艺范-素记日记 一个非常非常文艺的便笺 App,界面简单朴素,以时间轴的方式展开,每日写一篇,很适合写大长篇抒发感想,过往的日记可以展开点击待字补写,信纸有多重传统色彩可供选择,支持本地备份但无法分 ...

  8. 基于android的便签app,便签app排行榜前十名安卓手机哪个高颜值便签好用?

    原标题:便签app排行榜前十名安卓手机哪个高颜值便签好用? 手机上用的便签app,在手机便签app排行榜前十名的便签哪个好用?安卓手机上用的便签app哪个好用? 对于这些问题,考虑的角度与衡量的标准不 ...

  9. android系统便签 备份,安卓手机便签记事本怎么进行云备份?

    原标题:安卓手机便签记事本怎么进行云备份? 同事晨曦今天跟我们说了一件对她来说特别悲惨的事情,晨曦之前比较喜欢在小米手机自带的便签中记录一些工作.生活常用的文字内容,此外一些容易忘记的事情也会被记录到 ...

最新文章

  1. 用css绘制各种形状
  2. ajax返回显示下拉列表,ajax中网页传输(二)JSON——下拉列表显示练习(示例代码)...
  3. miui 8.2 android版本下载,miui8系统
  4. 【数据库】SQL查询强化篇
  5. 【转】3.3SharePoint服务器端对象模型 之 访问文件和文件夹(Part 3)
  6. 二维码相关---java生成二维码名片,并且自动保存到手机通讯录中...
  7. GitHub 标星 10,000+,Apache 顶级项目 ShardingSphere 的开源之路
  8. linux 命令 — 文件相关
  9. centos标准分区调整大小_磁盘怎么调整分区大小 磁盘调整分区大小教程【详细步骤】...
  10. 转载--柯尔莫哥洛夫
  11. 移动前端开发和 Web 前端开发的区别
  12. 单片机毕业设计 stm32车牌识别系统
  13. tas5782m功率调试
  14. 音频信号输入itc服务器,音频信号的两种传输方式,你知多少?
  15. unicloud云开发---uniapp云开发(四)---本机手机号一键登录以及第三方登陆
  16. 网络基础知识之IP与子网掩码和网络地址
  17. 运筹优化(十)--整数规划求解
  18. 记录:FC-SAN与IP-SAN比较
  19. 计算机大赛可以跨学校组队吗,大学生创新创业大赛可以跨校组队吗
  20. 7.4 小团队、低成本的管理实践之路

热门文章

  1. 毕业设计——>基于SSM的JAVA网上书城系统(购买图书)
  2. 示例代码-对称正定流形(Symmetric Positive Definite Manifold ,简称SPD流形)上均值计算,黎曼K-Means,黎曼均值.
  3. 教你一键生成形如Springboot的高大上banner打印效果
  4. python好用的库存尾货女装_服装库存尾货生意怎么做?
  5. APP2.0测试经验
  6. 监视器 RUIGE瑞鸽高清监视器TL-S1700HD
  7. html随机出现一张图片,html随机出现笑脸图片代码
  8. 分享12个专业级自媒体素材网站,大V用的素材是怎么找的?
  9. stm32f103rct6原理图
  10. 多实例部署、开机自启、xtrabackup备份与恢复