乐学成语 简介

一:软件介绍。

乐学成语是一款关于成语学习的小软件,主要具备以下的几点功能:

1.用户可以通过分类(动物类,人物类等等)来进行学习。

2.学习之余,也有适当的成语游戏。

3.可以根据用户的需要对成语进行收藏。

4.具有对成语的查询功能。

二:步骤。

1.创建数据库和表。

2.显示主界面。

3.显示学习列表

4.显示动物类的成语。

5.显示每条成语的详细内容

三.主要代码。

MainActivity

package cn.edu.bztc.happyidion.activity;

import android.app.TabActivity;

import android.content.Intent;

import android.os.Bundle;

import android.view.Menu;

import android.view.Window;

import android.widget.TabHost;

public class MainActivity extends TabActivity{

private TabHost tabHost;//导航栏控件

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);//取消标题栏

setContentView(R.layout.activity_main);

tabHost=getTabHost();     //获取TabHost实例

/*一个Tab对应一个name名称,一个标题,一个图标,yigeActivity页面*/

addTab("study",R.string.title_study,R.drawable.study,StudyActivity.class);

addTab("search",R.string.title_search,R.drawable.search,StudyActivity.class);

addTab("game",R.string.title_game,R.drawable.game,StudyActivity.class);

addTab("save",R.string.title_save,R.drawable.save,StudyActivity.class);

addTab("help",R.string.title_help,R.drawable.help,StudyActivity.class);

}

/*定义每个Tab的显示内容*/

private void addTab(String tag,int title_introduction,int title_icon,Class ActivityClass){

tabHost.addTab(tabHost.newTabSpec(tag).setIndicator(getString(title_introduction),getResources().getDrawable(title_icon)).setContent(new Intent(this,ActivityClass)));

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

}

AnimalAdapter

package cn.edu.bztc.happyidiom.adapter;

import java.util.List;

import cn.edu.bztc.happyidiom.entity.Animal;

import cn.edu.bztc.happyidion.activity.R;

import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.ViewGroup;

import android.webkit.WebView.FindListener;

import android.widget.ArrayAdapter;

import android.widget.ImageButton;

import android.widget.TextView;

import android.widget.Toast;

public class AnimalAdapter extends ArrayAdapter<Animal>{

private int resourceId;

private Context context;

public AnimalAdapter(Context context, int resource,List<Animal> objects) {

super(context,resource, objects);

this.context=context;

resourceId=resource;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

final Animal animal =getItem(position);//获取当前项的Animal实例

View view;

ViewHolder viewHolder;

if(convertView==null){//判断是否第一次运行,如果是则进入,并将上下文环境保存进convertView

view=LayoutInflater.from(getContext()).inflate(resourceId,null);

viewHolder=new ViewHolder();

viewHolder.tvName=(TextView)view.findViewById(R.id.tvName);

viewHolder.btnSave=(ImageButton)view.findViewById(R.id.btnSave);

viewHolder.btnSave.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0) {

Toast.makeText(context,"你要收藏"+animal.getName()+"吗",Toast.LENGTH_SHORT).show();

}

});

view.setTag(viewHolder);

}else{//如果不是第一次运行,convertView不为空,直接取出赋值给view

view=convertView;

viewHolder=(ViewHolder) view.getTag();

}

viewHolder.tvName.setText(animal.getName());//显示成语

return view;

}

class ViewHolder{

TextView tvName;

ImageButton btnSave;

}

}

CategoryAdapter

package cn.edu.bztc.happyidiom.adapter;

import java.util.List;

import cn.edu.bztc.happyidiom.entity.Category;

import cn.edu.bztc.happyidion.activity.R;

import android.content.Context;

import android.view.LayoutInflater;

import android.view.View;

import android.webkit.WebView.FindListener;

import android.widget.ArrayAdapter;

import android.widget.ImageView;

import android.widget.TextView;

public class CategoryAdapter extends ArrayAdapter<Category>{

private int resourceId;

public CategoryAdapter(Context context, int resource,

List<Category> categoryList) {

super(context,resource, categoryList);

resourceId=resource;

}

public View getView(int position, android.view.View convertView, android.view.ViewGroup parent) {

Category category=getItem(position);//获取当前项的Category实例

View view;

ViewHolder viewHolder;

if(convertView==null){

view=LayoutInflater.from(getContext()).inflate(resourceId,null);

viewHolder=new ViewHolder();

viewHolder.categoryImage=(ImageView)view.findViewById(R.id.category_image);

viewHolder.categoryName=(TextView)view.findViewById(R.id.category_name);

view.setTag(viewHolder);

}else{

view=convertView;

viewHolder=(ViewHolder) view.getTag();

}

viewHolder.categoryImage.setImageResource(category.getImageId());

viewHolder.categoryName.setText(category.getName());

return view;

}

class ViewHolder{

ImageView categoryImage;

TextView categoryName;

}

}

AnimalDao

package cn.edu.bztc.happyidiom.dao;

import java.util.ArrayList;

import java.util.List;

import cn.edu.bztc.happyidiom.db.DBOpenHelper;

import cn.edu.bztc.happyidiom.entity.Animal;

import android.content.Context;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

public class AnimalDao {

private static AnimalDao animaiDao;

private SQLiteDatabase db;

/*将构造方法私有化*/

private AnimalDao(Context context){

DBOpenHelper dbHelper=new DBOpenHelper(context);

db=dbHelper.openDatabase();

}

/*获取AnimalDao的实例*/

public synchronized static AnimalDao getInstance(Context context){

if(animaiDao==null){

animaiDao=new AnimalDao(context);

}

return animaiDao;

}

/*从数据库读取所有的动物类成语*/

public List<Animal> getAllAnimals(){

List<Animal> list=new ArrayList<Animal>();

Cursor cursor=db.query("animal",null,null,null,null,null,null);

if(cursor.moveToNext()){

do{

Animal animal=new Animal();

animal.setId(cursor.getInt(cursor.getColumnIndex("_id")));

animal.setName(cursor.getString(cursor.getColumnIndex("name")));

animal.setPronounce(cursor.getString(cursor.getColumnIndex("pronounce")));

animal.setAntonym(cursor.getString(cursor.getColumnIndex("antonym")));

animal.setHomoionym(cursor.getString(cursor.getColumnIndex("homoionym")));

animal.setDerivation(cursor.getString(cursor.getColumnIndex("derivation")));

animal.setExamples(cursor.getString(cursor.getColumnIndex("examples")));

animal.setExplain(cursor.getString(cursor.getColumnIndex("explain")));

list.add(animal);

}while(cursor.moveToNext());

}

return list;

}

}

DBOpenHelper

package cn.edu.bztc.happyidiom.db;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import cn.edu.bztc.happyidion.activity.R;

import android.content.Context;

import android.database.sqlite.SQLiteDatabase;

import android.os.Environment;

import android.util.Log;

/*实现将数据库文件从raw目录拷贝到手机里存放数据库的位置*/

public class DBOpenHelper {

private final int BUFFER_SIZE=400000;//缓冲区大小

public static final String DB_NAME="idioms.db";//保存的数据库文件名

public static final String PACKAGE_NAME="cn.edu.bztc.happyidion.activity";//应用的包名

public static final String DB_PATH="/data"+Environment.getDataDirectory().getAbsolutePath()+"/"+PACKAGE_NAME+"/databases";//在手机里存放数据库的位置

private Context context;

public DBOpenHelper(Context context){

this.context=context;

}

public SQLiteDatabase openDatabase(){

try {

File myDataPath=new File(DB_PATH);

if(!myDataPath.exists()){

myDataPath.mkdirs();//如果没有这个目录则创建

}

String dbfile=myDataPath+"/"+DB_NAME;

if(!(new File(dbfile).exists())){//判断数据库文件是否存在,如果不存在则执行导入,否则直接打开数据库

InputStream is=context.getResources().openRawResource(R.raw.idioms);

FileOutputStream fos=new FileOutputStream(dbfile);

byte[] buffer=new byte[BUFFER_SIZE];

int count=0;

while((count=is.read(buffer))>0){

fos.write(buffer,0,count);

}

fos.close();

is.close();

}

SQLiteDatabase db=SQLiteDatabase.openOrCreateDatabase(dbfile,null);

return db;

} catch (FileNotFoundException e) {

Log.e("MainActivity","File not found");

e.printStackTrace();

}catch (IOException e) {

Log.e("MainActivity","IO exception");

e.printStackTrace();

}

return null;

}

}

Animal

package cn.edu.bztc.happyidiom.entity;

public class Animal {

private int id;

private String name;//成语名称

private String pronounce;//成语发音

private String explain;//成语解释

private String antonym;//反义词

private String homoionym;//同义词

private String derivation;//源自

private String examples;//例子

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getPronounce() {

return pronounce;

}

public void setPronounce(String pronounce) {

this.pronounce = pronounce;

}

public String getExplain() {

return explain;

}

public void setExplain(String explain) {

this.explain = explain;

}

public String getAntonym() {

return antonym;

}

public void setAntonym(String antonym) {

this.antonym = antonym;

}

public String getHomoionym() {

return homoionym;

}

public void setHomoionym(String homoionym) {

this.homoionym = homoionym;

}

public String getDerivation() {

return derivation;

}

public void setDerivation(String derivation) {

this.derivation = derivation;

}

public String getExamples() {

return examples;

}

public void setExamples(String examples) {

this.examples = examples;

}

}

Category

package cn.edu.bztc.happyidiom.entity;

public class Category {

private String name;

private int imageId;

public Category(String name, int imageId) {

super();

this.name = name;

this.imageId = imageId;

}

public String getName() {

return name;

}

public int getImageId() {

return imageId;

}

}

时间: 2024-10-16 14:14:22

乐学成语 简介的相关文章

Android乐学成语的实现分析

Android乐学成语的实现分析 下面是效果图 目录工程如下: 具体实现以及写的过程中遇到的问题 第一步:建立数据库,像这种比较繁多的数据,可以用execl表格来做,然后Navict可视化工具,导入进去 加载数据数据库到项目中来,在res目录下建立一个raw文件夹,  DBOpenHelper.java package cn.deu.bztc.happyidiom.db; import java.io.File; import java.io.FileOutputStream; import j

Android小程序-乐学成语学习(一)

目标效果: 1.程序所需素材:http://pan.baidu.com/s/1kV3y1Cz 2.新建项目,在res目录下新建raw文件夹,将素材中idioms.db数据库复制到该文件夹下,这是因为raw文件夹中的东西,android会原封不动的拷贝到程序中,而不会转换为二进制文件. 3.src目录下新建七个包,adapter包用于存放适配器,activity包用于存放页面活动相关的代码,dao包用于存放数据操作相关的代码,db包用于数据库相关的代码,util包用于存放所有工具相关的代码,tes

Android小程序-乐学成语游戏(四)

目标效果:      游戏页面有几个小游戏,因为时间原因只做了第一个猜成语,是用的选择题方式,十道题以内答对六题算闯关成功. 1.新建GameActivity.java页面和activity_game.xml页面,activity_game.xml作为显示游戏目录页面: activity_game.xml页面: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=

乐学成语项目的实现

首先给软件取名为HappyIdiom,在开始编码之前,需要先对程序进行需求分析,想一想HappyIdiom中应该具备哪些功能.将这些功能全部整理出来之后,我们才好动手一一实现.这里我认为HappyIdiom中至少应该具备以下功能: 1.成语分类学习:你可以根据自己喜欢的分类(动物类.人物类.季节类.自然类.数字类.语言类.其他类)来进行学习. 2.乐猜成语:学习之余玩玩猜成语游戏,寓教于乐. 3.成语收藏:当用户遇到自己想要保存的成语,点击保存按钮,即保存到收藏页面以方便用户再次查看,对已经掌握

Android乐学成语之TabHost介绍及使用Fragment 替换 TabActivity

TabHost介绍 TabHost组件可以在界面中存放多个选项卡, 很多软件都使用了改组件进行设计; 1. TabHost常用组件 TabWidget : 该组件就是TabHost标签页中上部 或者 下部的按钮, 可以点击按钮切换选项卡; TabSpec : 代表了选项卡界面, 添加一个TabSpec即可添加到TabHost中; -- 创建选项卡 : newTabSpec(String tag), 创建一个选项卡; -- 添加选项卡 : addTab(tabSpec); TabHost的使用请看

Android乐学成语之错误总结

1.如果大家在非黑色背景下使用ListView控件时,Android默认可能在滚动ListView时这个列表控件的背景突然变成黑色.这样可能导致程序的黑色的背景和主程序的主题既不协调 我一开始是在AndroidManifest.xml中使用 android:theme="@android:style/Theme.NoTitleBar" 之后仔细查了查意思是:背景主题的没有标题栏的样式,默认如果没有设置的话,显示黑背景 解决这样的问题: 那就换成android:theme="@

Kettle简介

ETL和Kettle简介 ETL即数据抽取(Extract).转换(Transform).装载(Load)的过程.它是构建数据仓库的重要环节.数据仓库是面向主题的.集成的.稳定的且随时间不断变化的数据集合,用以支持经营管理中的决策制定过程.数据仓库系统中有可能存在着大量的噪声数据,引起的主要原因有:滥用缩写词.惯用语.数据输入错误.重复记录.丢失值.拼写变化等.即便是一个设计和规划良好的数据库系统,如果其中存在着大量的噪声数据,那么这个系统也是没有任何意义的,因为“垃圾进,垃圾出”(garbag

1. Go 语言简介

Go语言简介 引用原文地址:http://m.biancheng.net/golang/ Go语言也称 Golang,兼具效率.性能.安全.健壮等特性.这套Go语言教程(Golang教程)通俗易懂,深入浅出,既适合没有基础的读者快速入门,也适合工作多年的程序员查阅知识点. 这套教程在讲解一些知识点时,将 Go 语言和其他多种语言进行对比,让掌握其它编程语言的读者能迅速理解 Go 语言的特性. Go语言从底层原生支持并发,无须第三方库.开发者的编程技巧和开发经验就可以轻松搞定. Go 语言是一门新

Android网络通讯简介

网络通信应该包含三部分的内容:发送方.接收方.协议栈.发送方和接收方是参与通信的主体,协议栈是发送方和接收方进行通信的契约.按照服务类型,网络通信可分为面向连接和无连接的方式.面向连接是在通信前建立通信链路,而通信结束后释放该链路.无连接的方式则不需要在通信前建立通信连接,这种方式不保证传输的质量. Android提供了多种网络通信的方式,如Java中提供的网络编程,在Android中都提供了支持.Android中常用的网络编程方式如下: 针对TCP/IP协议的Socket和ServerSock