基于安卓的英语单词app完整代码
时间: 2023-11-27 12:03:25 浏览: 34
很抱歉,由于代码较长,此处无法提供完整代码。但是,以下是一个简单的基于安卓的英语单词app的实现步骤和代码示例:
1. 创建一个新项目
在 Android Studio 中创建一个新项目,选择空活动作为起始模板。
2. 添加单词列表
创建一个 RecyclerView 来显示单词列表,并创建一个适配器来管理列表数据。可以使用 SQLite 数据库来存储单词列表和单词的含义。
3. 添加搜索功能
在应用中添加搜索框,以便用户可以轻松地查找单词。可以使用 TextWatcher 监听搜索框中的文本变化,并在适配器中根据用户输入更新列表。
4. 添加单词详情页
为每个单词创建一个详情页,包含单词的含义、例句和发音。可以使用 MediaPlayer 类来播放单词的发音。
5. 添加单词记忆功能
为了帮助用户记忆单词,可以添加一些记忆功能,例如添加单词到收藏夹、创建单词卡片等。
以下是示例代码:
MainActivity.java
```java
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private WordAdapter mWordAdapter;
private EditText mSearchEditText;
private DBHelper mDBHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = findViewById(R.id.recycler_view);
mSearchEditText = findViewById(R.id.search_edit_text);
mDBHelper = new DBHelper(this);
mWordAdapter = new WordAdapter(this, mDBHelper.getAllWords());
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.setAdapter(mWordAdapter);
mSearchEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
mWordAdapter.filter(s.toString());
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
@Override
protected void onDestroy() {
mDBHelper.close();
super.onDestroy();
}
}
```
WordAdapter.java
```java
public class WordAdapter extends RecyclerView.Adapter<WordAdapter.ViewHolder> {
private Context mContext;
private List<Word> mWordList;
private List<Word> mFilteredWordList;
public WordAdapter(Context context, List<Word> wordList) {
mContext = context;
mWordList = wordList;
mFilteredWordList = new ArrayList<>(wordList);
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.item_word, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Word word = mFilteredWordList.get(position);
holder.mWordTextView.setText(word.getWord());
holder.mMeaningTextView.setText(word.getMeaning());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext, WordDetailActivity.class);
intent.putExtra("word", word);
mContext.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return mFilteredWordList.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
TextView mWordTextView;
TextView mMeaningTextView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
mWordTextView = itemView.findViewById(R.id.word_text_view);
mMeaningTextView = itemView.findViewById(R.id.meaning_text_view);
}
}
public void filter(String query) {
mFilteredWordList.clear();
if (TextUtils.isEmpty(query)) {
mFilteredWordList.addAll(mWordList);
} else {
for (Word word : mWordList) {
if (word.getWord().toLowerCase().contains(query.toLowerCase())) {
mFilteredWordList.add(word);
}
}
}
notifyDataSetChanged();
}
}
```
DBHelper.java
```java
public class DBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "words.db";
private static final int DATABASE_VERSION = 1;
private static final String TABLE_NAME = "words";
private static final String COLUMN_ID = "_id";
private static final String COLUMN_WORD = "word";
private static final String COLUMN_MEANING = "meaning";
private static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " (" +
COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_WORD + " TEXT, " +
COLUMN_MEANING + " TEXT)";
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE);
insertInitialData(db);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
public List<Word> getAllWords() {
List<Word> wordList = new ArrayList<>();
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME, null);
if (cursor.moveToFirst()) {
do {
int id = cursor.getInt(cursor.getColumnIndex(COLUMN_ID));
String word = cursor.getString(cursor.getColumnIndex(COLUMN_WORD));
String meaning = cursor.getString(cursor.getColumnIndex(COLUMN_MEANING));
wordList.add(new Word(id, word, meaning));
} while (cursor.moveToNext());
}
cursor.close();
return wordList;
}
private void insertInitialData(SQLiteDatabase db) {
ContentValues values = new ContentValues();
values.put(COLUMN_WORD, "apple");
values.put(COLUMN_MEANING, "a round fruit with red or green skin and a white inside");
db.insert(TABLE_NAME, null, values);
values.put(COLUMN_WORD, "banana");
values.put(COLUMN_MEANING, "a long curved fruit with a yellow skin and soft sweet flesh");
db.insert(TABLE_NAME, null, values);
values.put(COLUMN_WORD, "cake");
values.put(COLUMN_MEANING, "a sweet baked food made from flour, sugar, and other ingredients");
db.insert(TABLE_NAME, null, values);
}
}
```
Word.java
```java
public class Word implements Serializable {
private int mId;
private String mWord;
private String mMeaning;
public Word(int id, String word, String meaning) {
mId = id;
mWord = word;
mMeaning = meaning;
}
public int getId() {
return mId;
}
public void setId(int id) {
mId = id;
}
public String getWord() {
return mWord;
}
public void setWord(String word) {
mWord = word;
}
public String getMeaning() {
return mMeaning;
}
public void setMeaning(String meaning) {
mMeaning = meaning;
}
}
```
WordDetailActivity.java
```java
public class WordDetailActivity extends AppCompatActivity {
private Word mWord;
private TextView mWordTextView;
private TextView mMeaningTextView;
private Button mPronunciationButton;
private MediaPlayer mMediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_word_detail);
mWord = (Word) getIntent().getSerializableExtra("word");
mWordTextView = findViewById(R.id.word_text_view);
mMeaningTextView = findViewById(R.id.meaning_text_view);
mPronunciationButton = findViewById(R.id.pronunciation_button);
mWordTextView.setText(mWord.getWord());
mMeaningTextView.setText(mWord.getMeaning());
mPronunciationButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mMediaPlayer == null) {
mMediaPlayer = MediaPlayer.create(WordDetailActivity.this, R.raw.pronunciation);
}
mMediaPlayer.start();
}
});
}
@Override
protected void onDestroy() {
if (mMediaPlayer != null) {
mMediaPlayer.release();
mMediaPlayer = null;
}
super.onDestroy();
}
}
```