Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
勇敢di牛牛
EnglishLearningApp
提交
25cf3793
E
EnglishLearningApp
项目概览
勇敢di牛牛
/
EnglishLearningApp
通知
61
Star
1
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
EnglishLearningApp
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
25cf3793
编写于
5月 18, 2022
作者:
勇敢di牛牛
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
制定单词计划功能的实现
上级
7ca2533b
变更
21
隐藏空白更改
内联
并排
Showing
21 changed file
with
958 addition
and
51 deletion
+958
-51
.idea/misc.xml
.idea/misc.xml
+1
-0
app/src/main/AndroidManifest.xml
app/src/main/AndroidManifest.xml
+4
-1
app/src/main/assets/litepal.xml
app/src/main/assets/litepal.xml
+1
-0
app/src/main/java/com/example/testapp/Adapter/MeanChoiceAdapter.java
...n/java/com/example/testapp/Adapter/MeanChoiceAdapter.java
+126
-0
app/src/main/java/com/example/testapp/LearnWordActivity.java
app/src/main/java/com/example/testapp/LearnWordActivity.java
+207
-28
app/src/main/java/com/example/testapp/MainActivity.java
app/src/main/java/com/example/testapp/MainActivity.java
+23
-1
app/src/main/java/com/example/testapp/SetPlanActivity.java
app/src/main/java/com/example/testapp/SetPlanActivity.java
+149
-0
app/src/main/java/com/example/testapp/Util/TimeHelper.java
app/src/main/java/com/example/testapp/Util/TimeHelper.java
+106
-0
app/src/main/java/com/example/testapp/Util/WordPlan.java
app/src/main/java/com/example/testapp/Util/WordPlan.java
+107
-0
app/src/main/java/com/example/testapp/WordActivity.java
app/src/main/java/com/example/testapp/WordActivity.java
+4
-13
app/src/main/java/com/example/testapp/bean/BookData.java
app/src/main/java/com/example/testapp/bean/BookData.java
+1
-0
app/src/main/java/com/example/testapp/database/UserData.java
app/src/main/java/com/example/testapp/database/UserData.java
+49
-0
app/src/main/java/com/example/testapp/database/Word.java
app/src/main/java/com/example/testapp/database/Word.java
+6
-6
app/src/main/java/com/example/testapp/listener/CallBackListener.java
...n/java/com/example/testapp/listener/CallBackListener.java
+14
-0
app/src/main/java/com/example/testapp/listener/OnItemClickListener.java
...ava/com/example/testapp/listener/OnItemClickListener.java
+14
-0
app/src/main/java/com/example/testapp/listener/PermissionListener.java
...java/com/example/testapp/listener/PermissionListener.java
+14
-0
app/src/main/java/com/example/testapp/ui/home/HomeFragment.java
...c/main/java/com/example/testapp/ui/home/HomeFragment.java
+10
-0
app/src/main/res/layout/activity_set_plan.xml
app/src/main/res/layout/activity_set_plan.xml
+116
-0
app/src/main/res/layout/activity_test.xml
app/src/main/res/layout/activity_test.xml
+1
-1
app/src/main/res/layout/fragment_home.xml
app/src/main/res/layout/fragment_home.xml
+1
-1
app/src/main/res/values/strings.xml
app/src/main/res/values/strings.xml
+4
-0
未找到文件。
.idea/misc.xml
浏览文件 @
25cf3793
...
...
@@ -34,6 +34,7 @@
<entry
key=
"..\:/Android Toos/Android project/app/src/main/res/layout/activity_main.xml"
value=
"0.2"
/>
<entry
key=
"..\:/Android Toos/Android project/app/src/main/res/layout/activity_navigation.xml"
value=
"0.12601626016260162"
/>
<entry
key=
"..\:/Android Toos/Android project/app/src/main/res/layout/activity_recite_word.xml"
value=
"0.3333333333333333"
/>
<entry
key=
"..\:/Android Toos/Android project/app/src/main/res/layout/activity_set_plan.xml"
value=
"0.1"
/>
<entry
key=
"..\:/Android Toos/Android project/app/src/main/res/layout/activity_test.xml"
value=
"0.17916666666666667"
/>
<entry
key=
"..\:/Android Toos/Android project/app/src/main/res/layout/activity_translate_paragraph.xml"
value=
"0.1"
/>
<entry
key=
"..\:/Android Toos/Android project/app/src/main/res/layout/activity_translate_paragraph2.xml"
value=
"0.11614583333333334"
/>
...
...
app/src/main/AndroidManifest.xml
浏览文件 @
25cf3793
...
...
@@ -17,7 +17,10 @@
android:theme=
"@style/Theme.TestApp"
android:usesCleartextTraffic=
"true"
>
<activity
android:name=
".TestActivity"
android:name=
".SetPlanActivity"
android:exported=
"false"
/>
<activity
android:name=
".WordActivity"
android:exported=
"false"
/>
<activity
android:name=
".ReciteWord"
...
...
app/src/main/assets/litepal.xml
浏览文件 @
25cf3793
...
...
@@ -7,6 +7,7 @@
<mapping
class=
"com.example.testapp.database.Interpretation"
/>
<mapping
class=
"com.example.testapp.database.Phrase"
/>
<mapping
class=
"com.example.testapp.database.Sentence"
/>
<mapping
class=
"com.example.testapp.database.UserData"
/>
</list>
</litepal>
\ No newline at end of file
app/src/main/java/com/example/testapp/Adapter/MeanChoiceAdapter.java
0 → 100644
浏览文件 @
25cf3793
package
com.example.testapp.Adapter
;
import
android.util.Log
;
import
android.view.LayoutInflater
;
import
android.view.View
;
import
android.view.ViewGroup
;
import
android.widget.ImageView
;
import
android.widget.TextView
;
import
androidx.annotation.NonNull
;
import
androidx.cardview.widget.CardView
;
import
androidx.recyclerview.widget.RecyclerView
;
import
com.bumptech.glide.Glide
;
import
com.example.testapp.R
;
import
com.example.testapp.listener.OnItemClickListener
;
import
com.example.testapp.Util.MyApplication
;
import
com.example.testapp.entity.ItemWordMeanChoice
;
import
java.util.List
;
public
class
MeanChoiceAdapter
extends
RecyclerView
.
Adapter
<
MeanChoiceAdapter
.
ViewHolder
>
implements
View
.
OnClickListener
{
// 判断是否是第一次点击
public
static
boolean
isFirstClick
=
true
;
private
RecyclerView
recyclerView
;
private
List
<
ItemWordMeanChoice
>
mItemWordMeanChoiceList
;
private
static
final
String
TAG
=
"MeanChoiceAdapter"
;
// 声明单击接口
private
OnItemClickListener
onItemClickListener
;
public
void
setOnItemClickListener
(
OnItemClickListener
onItemClickListener
)
{
this
.
onItemClickListener
=
onItemClickListener
;
}
// 将RecyclerView附加到Adapter上
@Override
public
void
onAttachedToRecyclerView
(
@NonNull
RecyclerView
recyclerView
)
{
super
.
onAttachedToRecyclerView
(
recyclerView
);
this
.
recyclerView
=
recyclerView
;
}
@Override
public
void
onDetachedFromRecyclerView
(
@NonNull
RecyclerView
recyclerView
)
{
super
.
onDetachedFromRecyclerView
(
recyclerView
);
this
.
recyclerView
=
null
;
}
@Override
public
void
onClick
(
View
v
)
{
int
position
=
recyclerView
.
getChildAdapterPosition
(
v
);
Log
.
i
(
TAG
,
"onClick: 第几个选项被点击了?"
+
position
);
if
(
onItemClickListener
!=
null
)
{
Log
.
i
(
TAG
,
"onClick: 没有onItemClickListener"
);
onItemClickListener
.
onItemClick
(
recyclerView
,
v
,
position
,
mItemWordMeanChoiceList
.
get
(
position
));
}
}
static
class
ViewHolder
extends
RecyclerView
.
ViewHolder
{
View
meanView
;
CardView
cardMean
;
ImageView
imgChoice
;
TextView
textWordMean
;
public
ViewHolder
(
View
itemView
)
{
super
(
itemView
);
meanView
=
itemView
;
cardMean
=
itemView
.
findViewById
(
R
.
id
.
item_card_word_choice
);
imgChoice
=
itemView
.
findViewById
(
R
.
id
.
item_img_word_choice_status
);
textWordMean
=
itemView
.
findViewById
(
R
.
id
.
item_text_word_means
);
}
}
public
MeanChoiceAdapter
(
List
<
ItemWordMeanChoice
>
mItemWordMeanChoiceList
)
{
this
.
mItemWordMeanChoiceList
=
mItemWordMeanChoiceList
;
}
@Override
public
ViewHolder
onCreateViewHolder
(
ViewGroup
parent
,
int
viewType
)
{
View
view
=
LayoutInflater
.
from
(
parent
.
getContext
()).
inflate
(
R
.
layout
.
item_word_mean_choice
,
parent
,
false
);
view
.
setOnClickListener
(
this
);
final
ViewHolder
holder
=
new
ViewHolder
(
view
);
return
holder
;
}
@Override
public
void
onBindViewHolder
(
ViewHolder
holder
,
int
position
)
{
ItemWordMeanChoice
itemWordMeanChoice
=
mItemWordMeanChoiceList
.
get
(
position
);
holder
.
textWordMean
.
setText
(
itemWordMeanChoice
.
getWordMean
());
holder
.
imgChoice
.
setVisibility
(
View
.
VISIBLE
);
holder
.
textWordMean
.
setTextColor
(
recyclerView
.
getContext
().
getResources
().
getColor
(
R
.
color
.
colorLightBlack
));
if
(
itemWordMeanChoice
.
isRight
()
==
ItemWordMeanChoice
.
WRONG
)
{
// 说明答错了
holder
.
cardMean
.
setCardBackgroundColor
(
recyclerView
.
getContext
().
getColor
(
R
.
color
.
colorLittleRed
));
holder
.
imgChoice
.
setVisibility
(
View
.
VISIBLE
);
Glide
.
with
(
recyclerView
.
getContext
()).
load
(
R
.
drawable
.
icon_wrong
).
into
(
holder
.
imgChoice
);
holder
.
textWordMean
.
setTextColor
(
recyclerView
.
getContext
().
getColor
(
R
.
color
.
colorLightRed
));
}
else
if
(
itemWordMeanChoice
.
isRight
()
==
ItemWordMeanChoice
.
RIGHT
)
{
// 说明答对了
holder
.
cardMean
.
setCardBackgroundColor
(
recyclerView
.
getContext
().
getResources
().
getColor
(
R
.
color
.
colorLittleBlue
));
holder
.
imgChoice
.
setVisibility
(
View
.
VISIBLE
);
Glide
.
with
(
recyclerView
.
getContext
()).
load
(
R
.
drawable
.
btn_blue
).
into
(
holder
.
imgChoice
);
holder
.
textWordMean
.
setTextColor
(
recyclerView
.
getContext
().
getResources
().
getColor
(
R
.
color
.
colorLightBlue
));
}
else
if
(
itemWordMeanChoice
.
isRight
()
==
ItemWordMeanChoice
.
NOTSTART
)
{
holder
.
cardMean
.
setCardBackgroundColor
(
recyclerView
.
getContext
().
getColor
(
R
.
color
.
colorBgWhite
));
holder
.
imgChoice
.
setVisibility
(
View
.
GONE
);
holder
.
textWordMean
.
setTextColor
(
recyclerView
.
getContext
().
getResources
().
getColor
(
R
.
color
.
colorLightBlack
));
}
}
@Override
public
int
getItemCount
()
{
return
mItemWordMeanChoiceList
.
size
();
}
}
app/src/main/java/com/example/testapp/LearnWordActivity.java
浏览文件 @
25cf3793
...
...
@@ -3,6 +3,7 @@ package com.example.testapp;
import
android.app.ActivityOptions
;
import
android.content.Intent
;
import
android.os.Bundle
;
import
android.os.Handler
;
import
android.text.TextUtils
;
import
android.util.Log
;
import
android.view.View
;
...
...
@@ -16,16 +17,19 @@ import androidx.cardview.widget.CardView;
import
androidx.recyclerview.widget.LinearLayoutManager
;
import
androidx.recyclerview.widget.RecyclerView
;
import
com.example.testapp.Adapter.MeanChoiceAdapter
;
import
com.example.testapp.Util.MediaHelper
;
import
com.example.testapp.Util.TimeController
;
import
com.example.testapp.Util.WordPlan
;
import
com.example.testapp.database.Interpretation
;
import
com.example.testapp.database.Sentence
;
import
com.example.testapp.database.Word
;
import
com.example.testapp.entity.ItemWordMeanChoice
;
import
com.example.testapp.listener.OnItemClickListener
;
import
org.litepal.LitePal
;
import
java.text.ParseException
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.List
;
...
...
@@ -33,6 +37,7 @@ import java.util.List;
public
class
LearnWordActivity
extends
AppCompatActivity
implements
View
.
OnClickListener
{
private
int
NowId
;
private
int
Index
;
private
RecyclerView
recyclerView
;
...
...
@@ -63,6 +68,14 @@ public class LearnWordActivity extends AppCompatActivity implements View.OnClick
private
TextView
textLearnNum
,
textReviewNum
;
public
static
final
int
MODE_LEARN
=
1
;
public
static
final
int
MODE_REVIEW
=
2
;
public
static
final
int
MODE_NO
=
0
;
private
int
learnMode
=
MODE_NO
;
private
MeanChoiceAdapter
meanChoiceAdapter
;
private
static
final
String
TAG
=
"LearnWordActivity"
;
public
static
boolean
needUpdate
=
true
;
...
...
@@ -79,32 +92,98 @@ public class LearnWordActivity extends AppCompatActivity implements View.OnClick
private
String
tipSentence
;
public
static
List
<
Integer
>
wordsIdNeed
=
new
ArrayList
<>();
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
activity_learn_word
);
init
();
//寻找控件
LinearLayoutManager
linearLayoutManager
=
new
LinearLayoutManager
(
this
);
recyclerView
.
setLayoutManager
(
linearLayoutManager
);
meanChoiceAdapter
=
new
MeanChoiceAdapter
(
wordMeanChoices
);
recyclerView
.
setAdapter
(
meanChoiceAdapter
);
judgeMode
();
//判断学习模式
Log
.
i
(
TAG
,
"judgeMode:"
+
learnMode
);
SetUi
();
}
init
();
//寻找控件
NowId
=
1
;
setWord
();
private
void
SetUi
()
{
Log
.
i
(
TAG
,
"SetUi,learnMode : "
+
learnMode
);
if
(
learnMode
==
MODE_LEARN
){
Log
.
i
(
TAG
,
"SetUi: 新单词模式"
);
Index
=
0
;
//初始索引
NowId
=
wordsIdNeed
.
get
(
Index
);
//设置ID
setWordLearn
();
}
else
if
(
learnMode
==
MODE_REVIEW
){
Log
.
i
(
TAG
,
"SetUi: 复习单词模式"
);
Index
=
0
;
//初始索引
NowId
=
wordsIdNeed
.
get
(
Index
);
//设置ID
setWordLearn
();
}
}
private
int
judgeMode
()
{
wordsIdNeed
=
WordPlan
.
getNeedLearnIdList
();
Log
.
i
(
TAG
,
"judgeMode:wordsIdNeed.size(): "
+
wordsIdNeed
.
size
());
if
(
wordsIdNeed
.
size
()==
0
){
wordsIdNeed
=
WordPlan
.
getNeedReview
();
Log
.
i
(
TAG
,
"judgeMode:getNeedReview().size(): "
+
wordsIdNeed
.
size
());
//没有需要新学习的单词
if
(
wordsIdNeed
.
size
()==
0
){
//没有需要复习的单词
learnMode
=
MODE_NO
;
Log
.
i
(
TAG
,
"judgeMode: 没有需要学习和复习的单词了"
);
Toast
toast
=
Toast
.
makeText
(
this
,
"你已经完成了计划,休息一下吧!"
,
Toast
.
LENGTH_LONG
);
toast
.
show
();
finish
();
}
else
{
learnMode
=
MODE_REVIEW
;
showReview
();
}
}
else
{
learnMode
=
MODE_LEARN
;
showLearn
();
Log
.
i
(
TAG
,
"judgeMode: MODE_LEARN"
);
}
return
learnMode
;
}
private
void
setWord
()
{
cardTip
.
setVisibility
(
View
.
INVISIBLE
);
//影藏句子提醒
private
void
setChoice
()
{
wordMeanChoices
.
clear
();
Interpretation
word
=
LitePal
.
where
(
"wordId = ?"
,
+
NowId
+
""
).
find
(
Interpretation
.
class
).
get
(
0
);
StringBuilder
stringBuilder
=
new
StringBuilder
();
stringBuilder
.
append
(
word
.
getWordType
()).
append
(
". "
).
append
(
word
.
getCHSMeaning
());
List
<
Interpretation
>
interpretationWrongs
=
LitePal
.
where
(
"wordId != ?"
,
NowId
+
""
).
find
(
Interpretation
.
class
);
Collections
.
shuffle
(
interpretationWrongs
);
if
(
recyclerView
.
getVisibility
()
==
View
.
VISIBLE
)
{
wordMeanChoices
.
add
(
new
ItemWordMeanChoice
(
NowId
,
stringBuilder
.
toString
()
,
ItemWordMeanChoice
.
NOTSTART
));
for
(
int
i
=
0
;
i
<
3
;
++
i
)
{
wordMeanChoices
.
add
(
new
ItemWordMeanChoice
(-
1
,
interpretationWrongs
.
get
(
i
).
getWordType
()
+
". "
+
interpretationWrongs
.
get
(
i
).
getCHSMeaning
(),
ItemWordMeanChoice
.
NOTSTART
));
}
// 打乱顺序
Collections
.
shuffle
(
wordMeanChoices
);
meanChoiceAdapter
.
notifyDataSetChanged
();
setOnclick
();
}
}
List
<
Word
>
words
=
LitePal
.
where
(
"wordId = ?"
,
+
NowId
+
""
).
find
(
Word
.
class
);
Log
.
i
(
TAG
,
String
.
valueOf
(
words
.
toArray
().
length
));
textWord
.
setText
(
words
.
get
(
0
).
getWord
());
//查询提示的句子
List
<
Sentence
>
sentences
=
LitePal
.
where
(
"wordId = ?"
,
NowId
+
""
).
find
(
Sentence
.
class
);
if
(!
sentences
.
isEmpty
())
private
void
setWordLearn
()
{
if
(
learnMode
==
MODE_LEARN
)
{
setChoice
();
//新单词模式,给出选项
}
else
if
(
MODE_REVIEW
==
learnMode
)
{
//查询提示的句子
List
<
Sentence
>
sentences
=
LitePal
.
where
(
"wordId = ?"
,
NowId
+
""
).
find
(
Sentence
.
class
);
tipSentence
=
sentences
.
get
(
0
).
getEnSentence
();
}
List
<
Word
>
words
=
LitePal
.
where
(
"wordId = ?"
,
+
NowId
+
""
).
find
(
Word
.
class
);
Log
.
i
(
TAG
,
"setWordLearn: "
+
words
.
size
());
textWord
.
setText
(
words
.
get
(
0
).
getWord
());
// 给出单词
Log
.
i
(
TAG
,
"setWordLearn: "
+
words
.
get
(
0
).
getWord
());
textWordPhone
.
setText
(
words
.
get
(
0
).
getUkPhone
());
//给出音标
}
private
void
init
()
{
...
...
@@ -146,21 +225,18 @@ public class LearnWordActivity extends AppCompatActivity implements View.OnClick
}
break
;
case
R
.
id
.
card_no_know
:
WordDetailActivity
.
wordId
=
NowId
;
Intent
intent
=
new
Intent
();
intent
.
setClass
(
LearnWordActivity
.
this
,
WordDetailActivity
.
class
);
intent
.
setFlags
(
Intent
.
FLAG_ACTIVITY_NEW_TASK
);
intent
.
putExtra
(
WordDetailActivity
.
TYPE_NAME
,
WordDetailActivity
.
TYPE_LEARN
);
startActivity
(
intent
,
ActivityOptions
.
makeSceneTransitionAnimation
(
LearnWordActivity
.
this
).
toBundle
());
onNoKnow
();
break
;
case
R
.
id
.
card_know
:
NowId
++
;
setWord
();
WordPlan
.
setDegree
(
NowId
,
0
)
;
NextWord
();
//给出下一个单词
break
;
case
R
.
id
.
layout_word_tip
:
showDetail
();
break
;
case
R
.
id
.
layout_word_delete
:
WordPlan
.
setDegree
(
NowId
,
6
);
NextWord
();
break
;
case
R
.
id
.
layout_word_voice
:
MediaHelper
.
play
(
textWord
.
getText
().
toString
());
...
...
@@ -168,6 +244,37 @@ public class LearnWordActivity extends AppCompatActivity implements View.OnClick
}
}
private
void
onNoKnow
()
{
showDetail
();
NextWord
();
}
private
void
showDetail
(){
WordDetailActivity
.
wordId
=
NowId
;
Intent
intent
=
new
Intent
();
intent
.
setClass
(
LearnWordActivity
.
this
,
WordDetailActivity
.
class
);
intent
.
setFlags
(
Intent
.
FLAG_ACTIVITY_NEW_TASK
);
intent
.
putExtra
(
WordDetailActivity
.
TYPE_NAME
,
WordDetailActivity
.
TYPE_LEARN
);
startActivity
(
intent
,
ActivityOptions
.
makeSceneTransitionAnimation
(
LearnWordActivity
.
this
).
toBundle
());
}
private
void
NextWord
()
{
Log
.
i
(
TAG
,
"NextWord: 给出下一个单词"
);
if
(
Index
==
wordsIdNeed
.
toArray
().
length
-
1
){
Log
.
i
(
TAG
,
"NextWord: 今日新单词已经学完!"
);
//新单词已经学完
judgeMode
();
//判断,看是否有新单词复习
if
(
learnMode
==
MODE_REVIEW
){
Index
=
0
;
NowId
=
wordsIdNeed
.
get
(
Index
);
setWordLearn
();
}
}
else
{
Index
++;
NowId
=
wordsIdNeed
.
get
(
Index
);
setWordLearn
();
}
}
@Override
public
void
onBackPressed
()
{
Intent
intent
=
new
Intent
(
LearnWordActivity
.
this
,
MainActivity
.
class
);
...
...
@@ -179,17 +286,21 @@ public class LearnWordActivity extends AppCompatActivity implements View.OnClick
@Override
protected
void
onStart
()
{
super
.
onStart
();
}
private
void
showLearn
()
{
private
void
showReview
()
{
if
(
cardTip
.
getVisibility
()
==
View
.
VISIBLE
){
cardTip
.
setVisibility
(
View
.
INVISIBLE
);
//影藏句子提醒
}
recyclerView
.
setVisibility
(
View
.
GONE
);
layoutBottomReview
.
setVisibility
(
View
.
GONE
);
layoutBottomLearn
.
setVisibility
(
View
.
VISIBLE
);
}
private
void
showReview
()
{
private
void
showLearn
()
{
if
(
cardTip
.
getVisibility
()
==
View
.
VISIBLE
){
cardTip
.
setVisibility
(
View
.
INVISIBLE
);
//影藏句子提醒
}
recyclerView
.
setVisibility
(
View
.
VISIBLE
);
layoutBottomReview
.
setVisibility
(
View
.
VISIBLE
);
layoutBottomLearn
.
setVisibility
(
View
.
GONE
);
...
...
@@ -200,4 +311,72 @@ public class LearnWordActivity extends AppCompatActivity implements View.OnClick
super
.
onDestroy
();
}
private
void
setOnclick
(){
meanChoiceAdapter
.
setOnItemClickListener
(
new
OnItemClickListener
()
{
@Override
public
void
onItemClick
(
RecyclerView
parent
,
View
view
,
int
position
,
ItemWordMeanChoice
itemWordMeanChoice
)
{
if
(
MeanChoiceAdapter
.
isFirstClick
)
{
// 答错了
if
(
itemWordMeanChoice
.
getId
()
!=
NowId
)
{
itemWordMeanChoice
.
setRight
(
ItemWordMeanChoice
.
WRONG
);
meanChoiceAdapter
.
notifyDataSetChanged
();
MeanChoiceAdapter
.
isFirstClick
=
false
;
answerWrong
();
new
Handler
().
postDelayed
(
new
Runnable
()
{
@Override
public
void
run
()
{
MeanChoiceAdapter
.
isFirstClick
=
true
;
NextWord
();
}
},
500
);
}
else
{
// 答对了
itemWordMeanChoice
.
setRight
(
ItemWordMeanChoice
.
RIGHT
);
meanChoiceAdapter
.
notifyDataSetChanged
();
MeanChoiceAdapter
.
isFirstClick
=
false
;
new
Handler
().
postDelayed
(
new
Runnable
()
{
@Override
public
void
run
()
{
MeanChoiceAdapter
.
isFirstClick
=
true
;
answerRight
();
//setWordMeanData();
}
},
500
);
}
}
}
});
}
private
void
answerRight
()
{
int
degree
=
WordPlan
.
getDegree
(
NowId
);
Log
.
i
(
TAG
,
"answerRight: getDegree"
+
degree
);
WordPlan
.
setDegree
(
NowId
,
degree
+
1
);
if
(
degree
==
0
){
//两天后检测
try
{
WordPlan
.
setNewPlan
(
NowId
);
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
}
NextWord
();
//给出下一个单词
}
private
void
answerWrong
()
{
WordDetailActivity
.
wordId
=
NowId
;
WordPlan
.
setDegree
(
NowId
,-
1
);
//标记为生词
//两天后再次检测
try
{
WordPlan
.
setNewPlan
(
NowId
);
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
Intent
intent
=
new
Intent
();
intent
.
setClass
(
LearnWordActivity
.
this
,
WordDetailActivity
.
class
);
intent
.
setFlags
(
Intent
.
FLAG_ACTIVITY_NEW_TASK
);
intent
.
putExtra
(
WordDetailActivity
.
TYPE_NAME
,
WordDetailActivity
.
TYPE_LEARN
);
startActivity
(
intent
,
ActivityOptions
.
makeSceneTransitionAnimation
(
LearnWordActivity
.
this
).
toBundle
());
}
}
app/src/main/java/com/example/testapp/MainActivity.java
浏览文件 @
25cf3793
...
...
@@ -4,6 +4,7 @@ import android.annotation.SuppressLint;
import
android.app.Activity
;
import
android.content.Context
;
import
android.content.Intent
;
import
android.media.Image
;
import
android.os.Bundle
;
import
android.os.Handler
;
import
android.os.Looper
;
...
...
@@ -15,9 +16,16 @@ import android.widget.EditText;
import
android.widget.Toast
;
import
com.example.testapp.Util.States
;
import
com.example.testapp.Util.WordPlan
;
import
com.example.testapp.database.Interpretation
;
import
com.example.testapp.database.Phrase
;
import
com.example.testapp.database.Sentence
;
import
com.example.testapp.database.UserData
;
import
com.example.testapp.database.Word
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
import
org.litepal.LitePal
;
import
java.io.BufferedReader
;
import
java.io.IOException
;
...
...
@@ -70,6 +78,20 @@ public class MainActivity extends Activity {
public
void
onClick
(
View
view
)
{
username
=
String
.
valueOf
(
edt_user
.
getText
());
//获取文本框内容
password
=
String
.
valueOf
(
edt_password
.
getText
());
//模拟登录成功数据
UserData
userdata
=
new
UserData
();
userdata
.
setUserId
(
1
);
userdata
.
setLogged
(
1
);
userdata
.
save
();
if
(!
LitePal
.
findAll
(
Word
.
class
).
isEmpty
())
{
Log
.
i
(
TAG
,
String
.
valueOf
(
WordPlan
.
getUserId
()));
}
else
{
Toast
toast
=
Toast
.
makeText
(
MainActivity
.
this
,
"表是空的"
,
Toast
.
LENGTH_SHORT
);
toast
.
show
();
}
Intent
intent
=
new
Intent
(
MainActivity
.
this
,
NavigationActivity
.
class
);
startActivity
(
intent
);
Log
.
i
(
TAG
,
States
.
getNetName
(
MainActivity
.
this
));
//打印网络状态
...
...
@@ -82,7 +104,7 @@ public class MainActivity extends Activity {
btn_register
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
view
)
{
Intent
intent
=
new
Intent
(
MainActivity
.
this
,
Test
Activity
.
class
);
Intent
intent
=
new
Intent
(
MainActivity
.
this
,
Word
Activity
.
class
);
startActivity
(
intent
);
}
});
...
...
app/src/main/java/com/example/testapp/SetPlanActivity.java
0 → 100644
浏览文件 @
25cf3793
package
com.example.testapp
;
import
static
android
.
content
.
ContentValues
.
TAG
;
import
androidx.annotation.NonNull
;
import
androidx.annotation.RequiresApi
;
import
androidx.appcompat.app.AppCompatActivity
;
import
android.annotation.SuppressLint
;
import
android.icu.text.DateFormat
;
import
android.icu.text.SimpleDateFormat
;
import
android.icu.util.Calendar
;
import
android.net.Uri
;
import
android.os.Build
;
import
android.os.Bundle
;
import
android.os.Handler
;
import
android.os.Looper
;
import
android.os.Message
;
import
android.util.Log
;
import
android.view.View
;
import
android.widget.Button
;
import
android.widget.EditText
;
import
android.widget.ImageView
;
import
android.widget.TextView
;
import
android.widget.Toast
;
import
com.bumptech.glide.Glide
;
import
com.example.testapp.Util.TimeHelper
;
import
com.example.testapp.Util.WordPlan
;
import
com.example.testapp.config.ConstantData
;
import
com.example.testapp.database.Word
;
import
org.litepal.LitePal
;
import
org.litepal.crud.callback.FindMultiCallback
;
import
java.text.ParseException
;
import
java.time.LocalDateTime
;
import
java.time.format.DateTimeFormatter
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
public
class
SetPlanActivity
extends
AppCompatActivity
{
private
Button
planSure
;
private
ImageView
bookImg
;
private
TextView
wordNumText
;
private
TextView
learnedNumText
;
private
EditText
setNumEdt
;
private
Button
numSure
;
private
TextView
finishData
;
private
TextView
bookTitle
;
private
int
bookId
=
ConstantData
.
CET4_WORDBOOK
;
private
int
TotalNum
;
private
int
days
;
private
int
planNum
;
private
static
final
int
FINISH
=
0
;
@SuppressLint
(
"HandlerLeak"
)
private
Handler
handler
=
new
Handler
(
Looper
.
getMainLooper
())
{
@Override
public
void
handleMessage
(
@NonNull
Message
msg
)
{
switch
(
msg
.
what
)
{
case
FINISH:
Toast
toast
=
Toast
.
makeText
(
SetPlanActivity
.
this
,
"完成"
,
Toast
.
LENGTH_SHORT
);
toast
.
show
();
break
;
}
}
};
@Override
protected
void
onCreate
(
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
setContentView
(
R
.
layout
.
activity_set_plan
);
planSure
=
findViewById
(
R
.
id
.
Plan_sure
);
bookImg
=
findViewById
(
R
.
id
.
now_book_img
);
wordNumText
=
findViewById
(
R
.
id
.
words_num
);
learnedNumText
=
findViewById
(
R
.
id
.
learn_num
);
setNumEdt
=
findViewById
(
R
.
id
.
daily_num
);
numSure
=
findViewById
(
R
.
id
.
num_sure
);
finishData
=
findViewById
(
R
.
id
.
finish_data
);
bookTitle
=
findViewById
(
R
.
id
.
book_title
);
setView
();
numSure
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
view
)
{
planNum
=
Integer
.
parseInt
(
String
.
valueOf
(
setNumEdt
.
getText
()));
days
=
TotalNum
/
planNum
+
1
;
finishData
.
setText
(
"预计"
+
days
+
"天后背完"
);
}
});
planSure
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
view
)
{
WordPlan
.
setPlanNum
(
days
);
try
{
changeWordPlan
();
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
}
});
bookImg
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
view
)
{
long
timeNow
=
TimeHelper
.
getCurrentTimeStamp
();
Log
.
i
(
TAG
,
"现在时间 "
+
timeNow
);
List
<
Word
>
words
=
LitePal
.
where
(
"masterDegree = ? AND planeTime < ?"
,
"0"
,
timeNow
+
" "
).
find
(
Word
.
class
);
for
(
Word
word
:
words
){
Log
.
i
(
TAG
,
"onClick: "
+
word
.
getWord
());
Log
.
i
(
TAG
,
"onClick: "
+
word
.
getPlaneTime
());
}
}
});
}
private
void
changeWordPlan
()
throws
ParseException
{
List
<
Word
>
words
=
LitePal
.
where
(
"masterDegree = ?"
,
"0"
).
find
(
Word
.
class
);
int
day
=
0
;
int
i
=
0
;
long
time1
=
TimeHelper
.
getCurrentTimeStamp
();
//得到当前时间戳
for
(
Word
word
:
words
){
long
time
=
TimeHelper
.
getDateByDays
(
time1
,
day
);
word
.
setPlaneTime
(
time
);
word
.
save
();
i
++;
if
(
i
==
planNum
){
i
=
0
;
day
++;
}
}
}
private
void
setView
()
{
Glide
.
with
(
bookImg
).
load
(
ConstantData
.
bookPicById
(
bookId
)).
into
(
bookImg
);
bookTitle
.
setText
(
ConstantData
.
bookNameById
(
bookId
));
wordNumText
.
setText
(
"单词总数: "
+
ConstantData
.
wordTotalNumberById
(
bookId
)+
" 个"
);
TotalNum
=
ConstantData
.
wordTotalNumberById
(
bookId
);
learnedNumText
.
setText
(
"已经学习 "
+
WordPlan
.
getLearnedNum
()+
"个单词"
);
}
}
\ No newline at end of file
app/src/main/java/com/example/testapp/Util/TimeHelper.java
0 → 100644
浏览文件 @
25cf3793
package
com.example.testapp.Util
;
import
android.util.Log
;
import
java.text.ParseException
;
import
java.text.SimpleDateFormat
;
import
java.util.Calendar
;
import
java.util.Date
;
/*时间管理*/
public
class
TimeHelper
{
public
static
final
String
FORMAT_NOTIME
=
"yyyy-MM-dd"
;
public
static
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat
(
FORMAT_NOTIME
);
public
static
long
todayDate
;
private
static
final
String
TAG
=
"TimeController"
;
/*----日期类----*/
// 得到当前日期戳(不带时间,只有日期)
public
static
long
getCurrentDateStamp
()
{
Calendar
cal
=
Calendar
.
getInstance
();
int
currentYear
=
cal
.
get
(
Calendar
.
YEAR
);
int
currentMonth
=
cal
.
get
(
Calendar
.
MONTH
)
+
1
;
int
currentDate
=
cal
.
get
(
Calendar
.
DATE
);
long
time
=
0
;
try
{
time
=
simpleDateFormat
.
parse
(
currentYear
+
"-"
+
currentMonth
+
"-"
+
currentDate
).
getTime
();
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
Log
.
d
(
TAG
,
"getCurrentDateStamp: "
+
time
);
return
time
;
}
// 根据指定日期戳解析成日期形式(yyyy-MM-dd)
public
static
String
getStringDate
(
long
timeStamp
)
{
return
simpleDateFormat
.
format
(
new
Date
(
Long
.
parseLong
(
String
.
valueOf
(
timeStamp
))));
}
// 根据指定日期戳解析成日期形式(yyyy-MM-dd)
public
static
String
getStringDateDetail
(
long
timeStamp
)
{
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
return
simpleDateFormat
.
format
(
new
Date
(
Long
.
parseLong
(
String
.
valueOf
(
timeStamp
))));
}
// 得到当前日期的指定间隔后的日期
public
static
long
getDateByDays
(
long
time
,
int
intervalDay
)
throws
ParseException
{
// 转换成Calendar
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTimeInMillis
(
time
);
calendar
.
add
(
Calendar
.
DATE
,
intervalDay
);
return
calendar
.
getTimeInMillis
();
}
// 返回两个日期之间相隔多少天
public
static
int
daysInternal
(
long
time1
,
long
time2
)
throws
ParseException
{
Date
date1
=
simpleDateFormat
.
parse
(
getStringDate
(
time1
));
Date
date2
=
simpleDateFormat
.
parse
(
getStringDate
(
time2
));
int
days
=
(
int
)
((
date2
.
getTime
()
-
date1
.
getTime
())
/
(
1000
*
3600
*
24
));
return
days
;
}
/*----时间类----*/
// 得到当前时间戳(有日期与时间)
public
static
long
getCurrentTimeStamp
()
{
return
System
.
currentTimeMillis
();
}
// 判断两个时间戳是否为同一天
public
static
boolean
isTheSameDay
(
long
time1
,
long
time2
)
{
return
getStringDate
(
time1
).
equals
(
getStringDate
(
time2
));
}
// 返回过去第几天的日期
public
static
String
getPastDate
(
int
past
)
{
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
set
(
Calendar
.
DAY_OF_YEAR
,
calendar
.
get
(
Calendar
.
DAY_OF_YEAR
)
-
past
);
Date
today
=
calendar
.
getTime
();
SimpleDateFormat
format
=
new
SimpleDateFormat
(
"MM-dd"
);
String
result
=
format
.
format
(
today
);
return
result
;
}
// 返回过去第几天的日期(有年份)
public
static
String
getPastDateWithYear
(
int
past
)
{
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
set
(
Calendar
.
DAY_OF_YEAR
,
calendar
.
get
(
Calendar
.
DAY_OF_YEAR
)
-
past
);
Date
today
=
calendar
.
getTime
();
SimpleDateFormat
format
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
String
result
=
format
.
format
(
today
);
return
result
;
}
// 获取n天以后的日期
public
static
String
getDayAgoOrAfterString
(
int
num
)
{
Calendar
calendar1
=
Calendar
.
getInstance
();
SimpleDateFormat
sdf1
=
new
SimpleDateFormat
(
"yyyy年MM月dd日"
);
calendar1
.
add
(
Calendar
.
DATE
,
num
);
return
sdf1
.
format
(
calendar1
.
getTime
());
}
}
app/src/main/java/com/example/testapp/Util/WordPlan.java
0 → 100644
浏览文件 @
25cf3793
package
com.example.testapp.Util
;
import
android.util.Log
;
import
com.example.testapp.database.UserData
;
import
com.example.testapp.database.Word
;
import
org.litepal.LitePal
;
import
java.text.ParseException
;
import
java.util.ArrayList
;
import
java.util.List
;
public
class
WordPlan
{
public
static
String
TAG
=
"WordPlan"
;
public
static
int
getUserId
()
{
List
<
UserData
>
userData
=
LitePal
.
where
(
"logged = ?"
,+
1
+
""
).
find
(
UserData
.
class
);
Log
.
i
(
"当前ID"
,
String
.
valueOf
(
userData
.
get
(
0
).
getUserId
()));
return
userData
.
get
(
0
).
getUserId
();
}
public
static
void
setPlanNum
(
int
planNum
){
//写入每次计划背诵的单词
int
Userid
=
getUserId
();
List
<
UserData
>
userData
=
LitePal
.
where
(
"UserId = ?"
,+
Userid
+
""
).
find
(
UserData
.
class
);
userData
.
get
(
0
).
setPlaneNum
(
planNum
);
userData
.
get
(
0
).
save
();
}
private
static
int
getPlanNum
(){
int
Userid
=
getUserId
();
List
<
UserData
>
userData
=
LitePal
.
where
(
"UserId = ?"
,+
Userid
+
""
).
find
(
UserData
.
class
);
return
userData
.
get
(
0
).
getPlaneNum
();
}
public
static
List
<
Word
>
getNeedLearn
(){
//给出当天需要记忆的单词
int
num
=
getPlanNum
();
List
<
Word
>
list
=
null
;
List
<
Word
>
words
=
LitePal
.
where
(
"masterDegree = ?"
,
"0"
).
find
(
Word
.
class
);
if
(
words
.
toArray
().
length
>
num
){
list
=
words
.
subList
(
0
,
num
);
}
else
{
list
=
words
;
}
return
list
;
}
public
static
int
getDegree
(
int
wordId
){
Word
word
=
LitePal
.
where
(
"wordId = ?"
,+
wordId
+
""
).
find
(
Word
.
class
).
get
(
0
);
return
word
.
getMasterDegree
();
}
public
static
void
setDegree
(
int
wordId
,
int
degree
){
Word
word
=
LitePal
.
where
(
"wordId = ?"
,+
wordId
+
""
).
find
(
Word
.
class
).
get
(
0
);
word
.
setMasterDegree
(
degree
);
word
.
save
();
}
public
static
int
getLearnedNum
(){
int
Userid
=
getUserId
();
List
<
UserData
>
userData
=
LitePal
.
where
(
"UserId = ?"
,+
Userid
+
""
).
find
(
UserData
.
class
);
return
userData
.
get
(
0
).
getLearnedNum
();
}
public
static
void
setLearnedNum
(
int
num
){
int
Userid
=
getUserId
();
List
<
UserData
>
userData
=
LitePal
.
where
(
"UserId = ?"
,+
Userid
+
""
).
find
(
UserData
.
class
);
userData
.
get
(
0
).
setLearnedNum
(
num
);
userData
.
get
(
0
).
save
();
}
public
static
List
<
Integer
>
getNeedLearnIdList
(){
//给出今天需要学习的Id列表
long
timeNow
=
TimeHelper
.
getCurrentTimeStamp
();
List
<
Integer
>
idList
=
new
ArrayList
<>();
Log
.
i
(
TAG
,
"现在时间 "
+
timeNow
);
List
<
Word
>
words
=
LitePal
.
where
(
"masterDegree < ? AND planeTime < ?"
,
"2"
,
timeNow
+
" "
).
find
(
Word
.
class
);
for
(
Word
word
:
words
){
idList
.
add
(
word
.
getWordId
());
Log
.
i
(
TAG
,
"getNeedLearnIdList: "
+
word
.
getWord
());
Log
.
i
(
TAG
,
"getNeedLearnIdList: "
+
word
.
getPlaneTime
());
}
return
idList
;
}
public
static
List
<
Integer
>
getNeedReview
(){
//给出今天需要复习的单词
List
<
Integer
>
idList
=
new
ArrayList
<>();
List
<
Word
>
words
=
LitePal
.
where
(
"masterDegree = ?"
,
"-1"
).
select
(
"wordId"
).
find
(
Word
.
class
);
for
(
Word
word
:
words
){
idList
.
add
(
word
.
getWordId
());
}
return
idList
;
}
public
static
void
setNewPlan
(
int
wordId
)
throws
ParseException
{
//设置两天后再次检测
int
day
=
2
;
Word
word
=
LitePal
.
where
(
"wordId = ?"
,+
wordId
+
""
).
find
(
Word
.
class
).
get
(
0
);
long
time1
=
TimeHelper
.
getCurrentTimeStamp
();
//得到当前时间戳
long
time
=
TimeHelper
.
getDateByDays
(
time1
,
day
);
word
.
setPlaneTime
(
time
);
word
.
save
();
}
}
app/src/main/java/com/example/testapp/
Test
Activity.java
→
app/src/main/java/com/example/testapp/
Word
Activity.java
浏览文件 @
25cf3793
...
...
@@ -18,17 +18,8 @@ import androidx.annotation.NonNull;
import
com.example.testapp.Util.JsonHelper
;
import
com.example.testapp.bean.WordItem
;
import
com.google.gson.Gson
;
import
com.google.gson.reflect.TypeToken
;
import
java.io.BufferedReader
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.InputStreamReader
;
import
java.io.Reader
;
import
java.util.List
;
...
...
@@ -37,12 +28,12 @@ import okhttp3.OkHttpClient;
import
okhttp3.Request
;
import
okhttp3.Response
;
public
class
Test
Activity
extends
Activity
{
public
class
Word
Activity
extends
Activity
{
Button
buttonW
;
Button
buttonDownLoad
;
EditText
edt
;
TextView
textview
;
String
TAG
=
"
Test
Activity"
;
String
TAG
=
"
Word
Activity"
;
Boolean
haveWrite
=
false
;
String
title
;
String
context
;
...
...
@@ -82,7 +73,7 @@ public class TestActivity extends Activity {
buttonDownLoad
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
view
)
{
progressDialog
=
new
ProgressDialog
(
Test
Activity
.
this
);
progressDialog
=
new
ProgressDialog
(
Word
Activity
.
this
);
progressDialog
.
setTitle
(
"请稍等"
);
progressDialog
.
setMessage
(
"数据包正在下载中..."
);
progressDialog
.
setCancelable
(
false
);
...
...
@@ -95,7 +86,7 @@ public class TestActivity extends Activity {
buttonW
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
view
)
{
Intent
intent
=
new
Intent
(
Test
Activity
.
this
,
LearnWordActivity
.
class
);
Intent
intent
=
new
Intent
(
Word
Activity
.
this
,
LearnWordActivity
.
class
);
startActivity
(
intent
);
}
});
...
...
app/src/main/java/com/example/testapp/bean/BookData.java
浏览文件 @
25cf3793
...
...
@@ -8,4 +8,5 @@ public class BookData {
"https://nos.netease.com/ydschool-online/youdao_CET6_2.jpg"
,
"https://nos.netease.com/ydschool-online/youdao_KaoYan_2.jpg"
};
}
app/src/main/java/com/example/testapp/database/UserData.java
0 → 100644
浏览文件 @
25cf3793
package
com.example.testapp.database
;
import
org.litepal.annotation.Column
;
import
org.litepal.crud.LitePalSupport
;
public
class
UserData
extends
LitePalSupport
{
@Column
(
unique
=
true
)
private
int
UserId
;
@Column
(
defaultValue
=
"0"
)
private
int
PlaneNum
;
//每日计划背单词个数
@Column
(
defaultValue
=
"0"
)
private
int
LearnedNum
;
//每日计划背单词个数
private
int
logged
;
//logged :1 是当前登录,0不是当前登录
public
void
setLogged
(
int
logged
)
{
this
.
logged
=
logged
;
}
public
int
getUserId
(){
return
UserId
;
}
public
void
setUserId
(
int
id
){
this
.
UserId
=
id
;
}
public
int
getPlaneNum
(){
return
PlaneNum
;
}
public
void
setPlaneNum
(
int
userPlanNum
){
this
.
PlaneNum
=
userPlanNum
;
}
public
int
getLearnedNum
(){
return
LearnedNum
;
}
public
void
setLearnedNum
(
int
learnedNum
){
this
.
LearnedNum
=
learnedNum
;
}
}
app/src/main/java/com/example/testapp/database/Word.java
浏览文件 @
25cf3793
...
...
@@ -71,9 +71,9 @@ public class Word extends LitePalSupport {
@Column
(
defaultValue
=
"0"
)
private
int
examRightNum
;
//
上次已掌握
时间(时间戳)
//
计划学习
时间(时间戳)
@Column
(
defaultValue
=
"0"
)
private
long
lastMaster
Time
;
private
long
plane
Time
;
// 上次复习的时间(时间戳)
@Column
(
defaultValue
=
"0"
)
...
...
@@ -246,12 +246,12 @@ public class Word extends LitePalSupport {
this
.
examRightNum
=
examRightNum
;
}
public
long
get
LastMaster
Time
()
{
return
lastMaster
Time
;
public
long
get
Plane
Time
()
{
return
plane
Time
;
}
public
void
set
LastMasterTime
(
long
lastMaster
Time
)
{
this
.
lastMasterTime
=
lastMaster
Time
;
public
void
set
PlaneTime
(
long
Plane
Time
)
{
this
.
planeTime
=
Plane
Time
;
}
public
long
getLastReviewTime
()
{
...
...
app/src/main/java/com/example/testapp/listener/CallBackListener.java
0 → 100644
浏览文件 @
25cf3793
package
com.example.testapp.listener
;
import
java.io.IOException
;
import
okhttp3.Call
;
import
okhttp3.Response
;
public
interface
CallBackListener
{
public
void
onFailure
(
Call
call
,
IOException
e
);
public
void
onResponse
(
Call
call
,
Response
response
)
throws
IOException
;
}
app/src/main/java/com/example/testapp/listener/OnItemClickListener.java
0 → 100644
浏览文件 @
25cf3793
package
com.example.testapp.listener
;
import
android.view.View
;
import
androidx.recyclerview.widget.RecyclerView
;
import
com.example.testapp.entity.ItemWordMeanChoice
;
public
interface
OnItemClickListener
{
void
onItemClick
(
RecyclerView
parent
,
View
view
,
int
position
,
ItemWordMeanChoice
itemWordMeanChoice
);
}
app/src/main/java/com/example/testapp/listener/PermissionListener.java
0 → 100644
浏览文件 @
25cf3793
package
com.example.testapp.listener
;
import
java.util.List
;
public
interface
PermissionListener
{
//已授权
void
onGranted
();
//未授权
void
onDenied
(
List
<
String
>
deniedPermission
);
}
app/src/main/java/com/example/testapp/ui/home/HomeFragment.java
浏览文件 @
25cf3793
...
...
@@ -12,6 +12,7 @@ import androidx.annotation.NonNull;
import
androidx.fragment.app.Fragment
;
import
androidx.lifecycle.ViewModelProvider
;
import
com.example.testapp.SetPlanActivity
;
import
com.example.testapp.WordBook
;
import
com.example.testapp.databinding.FragmentHomeBinding
;
...
...
@@ -19,6 +20,7 @@ public class HomeFragment extends Fragment {
private
FragmentHomeBinding
binding
;
Button
bookManageBtn
;
Button
plan
;
public
View
onCreateView
(
@NonNull
LayoutInflater
inflater
,
ViewGroup
container
,
Bundle
savedInstanceState
)
{
...
...
@@ -28,6 +30,14 @@ public class HomeFragment extends Fragment {
binding
=
FragmentHomeBinding
.
inflate
(
inflater
,
container
,
false
);
View
root
=
binding
.
getRoot
();
bookManageBtn
=
binding
.
bookManger
;
plan
=
binding
.
plan
;
plan
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
view
)
{
Intent
intent
=
new
Intent
(
getContext
(),
SetPlanActivity
.
class
);
startActivity
(
intent
);
}
});
bookManageBtn
.
setOnClickListener
(
new
View
.
OnClickListener
()
{
@Override
public
void
onClick
(
View
view
)
{
...
...
app/src/main/res/layout/activity_set_plan.xml
0 → 100644
浏览文件 @
25cf3793
<?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=
"match_parent"
android:orientation=
"vertical"
tools:context=
".SetPlanActivity"
>
<TextView
android:text=
"@string/NowBook"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:textSize=
"25sp"
android:paddingStart=
"15dp"
tools:ignore=
"RtlSymmetry"
/>
<androidx.cardview.widget.CardView
android:layout_width=
"match_parent"
android:layout_height=
"150dp"
>
<RelativeLayout
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
>
<ImageView
android:id=
"@+id/now_book_img"
android:layout_width=
"160dp"
android:layout_height=
"match_parent"
android:layout_margin=
"5dp"
android:scaleType=
"fitCenter"
android:src=
"@drawable/translate"
/>
<TextView
android:id=
"@+id/book_title"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"15dp"
android:layout_marginTop=
"5dp"
android:layout_toEndOf=
"@+id/now_book_img"
android:text=
"词书标题"
android:textSize=
"22sp"
/>
<TextView
android:id=
"@+id/words_num"
android:layout_width=
"wrap_content"
android:layout_height=
"50dp"
android:layout_marginStart=
"20dp"
android:layout_marginTop=
"50dp"
android:layout_toEndOf=
"@+id/now_book_img"
android:text=
"单词总数:500个"
android:textSize=
"18dp"
/>
<TextView
android:id=
"@+id/learn_num"
android:layout_below=
"@+id/words_num"
android:layout_toEndOf=
"@+id/now_book_img"
android:layout_marginStart=
"20dp"
android:text=
"已经学习 0 个"
android:textSize=
"18dp"
android:layout_width=
"wrap_content"
android:layout_height=
"50dp"
/>
</RelativeLayout>
</androidx.cardview.widget.CardView>
<TextView
android:text=
"@string/setPlan"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:textSize=
"25sp"
android:paddingTop=
"15dp"
android:paddingStart=
"15dp"
tools:ignore=
"RtlSymmetry"
/>
<LinearLayout
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:paddingTop=
"10dp"
android:paddingBottom=
"10dp"
android:orientation=
"horizontal"
>
<EditText
android:paddingTop=
"20dp"
android:paddingStart=
"15dp"
android:id=
"@+id/daily_num"
android:inputType=
"number"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:hint=
"@string/daily_num"
/>
<Button
android:layout_marginLeft=
"10dp"
android:id=
"@+id/num_sure"
android:background=
"@drawable/btn_white"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"确定"
/>
</LinearLayout>
<TextView
android:paddingTop=
"50dp"
android:id=
"@+id/finish_data"
android:textSize=
"25sp"
android:layout_gravity=
"center_horizontal"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"@string/finish_data"
/>
<Button
android:id=
"@+id/Plan_sure"
android:layout_marginLeft=
"30dp"
android:layout_marginRight=
"30dp"
android:textSize=
"20sp"
android:text=
"保 存 当 前 计 划"
android:background=
"@color/btn_blue"
android:layout_marginTop=
"60dp"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
/>
</LinearLayout>
\ No newline at end of file
app/src/main/res/layout/activity_test.xml
浏览文件 @
25cf3793
...
...
@@ -5,7 +5,7 @@
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
tools:context=
".
Test
Activity"
>
tools:context=
".
Word
Activity"
>
<Button
android:id=
"@+id/button1"
...
...
app/src/main/res/layout/fragment_home.xml
浏览文件 @
25cf3793
...
...
@@ -15,7 +15,7 @@
/>
<Button
android:layout_marginStart=
"100dp"
android:id=
"@+id/
btn_recite_word
"
android:id=
"@+id/
plan
"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"词书管理"
...
...
app/src/main/res/values/strings.xml
浏览文件 @
25cf3793
...
...
@@ -23,5 +23,9 @@
<string
name=
"translate_title"
>
段落翻译
</string>
<string
name=
"word_books"
>
词书管理
</string>
<string
name=
"down_word_book"
>
下载词书
</string>
<string
name=
"NowBook"
>
当前词书
</string>
<string
name=
"setPlan"
>
设定计划
</string>
<string
name=
"daily_num"
>
请输入每日记忆单词个数
</string>
<string
name=
"finish_data"
>
预计 9999 天后背完
</string>
</resources>
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录