Android小程序-乐学成语收藏(三)
2016-06-16 13:55
477 查看
目标效果:
![](http://img.blog.csdn.net/20160616133030530?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
在学习时收藏成语,切换到收藏页面可以显示收藏过的成语,点击右边的红色五角星可以删除该成语。
1.新建CollectActivity.java页面和activity_collect.xml页面作为收藏页面。
activity_collect.xml页面:
2.新建MyDatabaseHelper.java页面创建收藏表存储收藏信息。
MyDatabaseHelper.java页面:
3.新建CollectDao.java页面作为收藏表的操作页面。
CollectDao.java页面:
4.创建CollectAdapter.java页面为适配器,配置数据源和ListView。
CollectAdapter.java页面:
5.新建ChangeListData.java接口,用于删除时调用。
ChangeListData.java页面:
6.CollectActivity.java页面设置ListView的点击事件。
CollectActivity.java页面:
7.修改MainActivity.java页面,一是创建了一个数据库存储收藏表,二是更改了TabHost子页面的绑定方式,原先那种运行程序只会在一开始创建页面,之后更改页面信息都不会再动态刷新,更改后收藏列表可以显示出来。
MainActivity.java页面:
8.程序源码:点击打开链接
9.运行就可以显示目标效果了。
在学习时收藏成语,切换到收藏页面可以显示收藏过的成语,点击右边的红色五角星可以删除该成语。
1.新建CollectActivity.java页面和activity_collect.xml页面作为收藏页面。
activity_collect.xml页面:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/bg_ling" tools:context=".GameActivity" > <ListView android:id="@+id/lvCollect" android:layout_width="match_parent" android:layout_height="match_parent"> </ListView> </RelativeLayout>
2.新建MyDatabaseHelper.java页面创建收藏表存储收藏信息。
MyDatabaseHelper.java页面:
package cn.edu.bztc.happyidiom.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class MyDatabaseHelper extends SQLiteOpenHelper { public static final String DB_COLLECT_NAME = "collect.db";// 数据库名 public static final int COLLECT_VERSION = 1;// 数据库版本号 public static final String TABLE_COLLECT = "collect";// 表名 public static final String COLLECT_ID = "id";// id字段 public static final String COLLECT_NAME = "name";// 成语名称 public static final String COLLECT_PRO = "pronounce";// 成语发音 public static final String COLLECT_EXP = "explain";// 成语解释 public static final String COLLECT_ANT = "antonym";// 反义词 public static final String COLLECT_HOM = "homoionym";// 同义词 public static final String COLLECT_DER = "derivation";// 源自 public static final String COLLECT_EXA = "examples";// 例子 public static final String CREATE_COLLECT = "create table collect (id integer primary key autoincrement,name text,pronounce text,explain text,antonym text,homoionym text,derivation text,examples text)"; public MyDatabaseHelper(Context context) { super(context, DB_COLLECT_NAME, null, COLLECT_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_COLLECT);// 执行创建数据库的SQL语句 } @Override public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { } }
3.新建CollectDao.java页面作为收藏表的操作页面。
CollectDao.java页面:
package cn.edu.bztc.happyidiom.dao; import java.util.ArrayList; import java.util.List; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.util.Log; import cn.edu.bztc.happyidiom.db.MyDatabaseHelper; import cn.edu.bztc.happyidiom.entity.Animal; public class CollectDao { private static CollectDao collectDao; SQLiteDatabase db; MyDatabaseHelper mydatabaseHelper; public CollectDao(Context context){ mydatabaseHelper=new MyDatabaseHelper(context); } public synchronized static CollectDao getInstance(Context context){ if(collectDao==null){ collectDao=new CollectDao(context); } return collectDao; } /*添加收藏*/ public void add(Animal animal) { db=mydatabaseHelper.getWritableDatabase(); ContentValues value=new ContentValues(); value.put(MyDatabaseHelper.COLLECT_NAME,animal.getName()); value.put(MyDatabaseHelper.COLLECT_PRO,animal.getPronounce()); value.put(MyDatabaseHelper.COLLECT_EXP,animal.getExplain()); value.put(MyDatabaseHelper.COLLECT_ANT,animal.getAntonym()); value.put(MyDatabaseHelper.COLLECT_HOM,animal.getHomoionym()); value.put(MyDatabaseHelper.COLLECT_DER,animal.getDerivation()); value.put(MyDatabaseHelper.COLLECT_EXA,animal.getExamples()); db.insert(MyDatabaseHelper.TABLE_COLLECT,null,value); value.clear(); } /*从数据库读取所有的动物类成语*/ public List<Animal> getAllAnimals(List<Animal> list){ db=mydatabaseHelper.getReadableDatabase(); Cursor cursor=db.query("collect",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()); }cursor.close(); return list; } /*根据id删除收藏信息*/ public void del(int id){ db=mydatabaseHelper.getWritableDatabase(); db.delete(mydatabaseHelper.TABLE_COLLECT,mydatabaseHelper.COLLECT_ID+"=?",new String[]{String.valueOf(id)}); } }
4.创建CollectAdapter.java页面为适配器,配置数据源和ListView。
CollectAdapter.java页面:
package cn.edu.bztc.happyidiom.adapter; import java.util.List; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageButton; import android.widget.TextView; import android.widget.Toast; import cn.edu.bztc.happyidiom.dao.CollectDao; import cn.edu.bztc.happyidiom.entity.Animal; import cn.edu.bztc.happyidiom.minterface.ChangeListData; import cn.edu.bztc.happyidion.activity.CollectActivity; import cn.edu.bztc.happyidion.activity.MainActivity; import cn.edu.bztc.happyidion.activity.R; public class CollectAdapter extends ArrayAdapter<Animal> { private int resourceId; private Context context; private ChangeListData mChangeListData; public CollectAdapter(Context context, int resource, List<Animal> objects) { super(context, resource, objects); this.context = context; resourceId = resource; } public ChangeListData getChangeListData() { return mChangeListData; } public void setChangeListData(ChangeListData mChangeListData) { this.mChangeListData = mChangeListData; } @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.btnDel = (ImageButton) view.findViewById(R.id.btnDel); viewHolder.btnDel.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { /* 弹出提示框 */ showDialog(); } /* 弹出提示框 */ private void showDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setMessage("确定删除?");// 设置内容 /* 添加对话框中确定按钮和点击事件 */ builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { CollectDao collectDao = new CollectDao(context); collectDao.del(animal.getId()); Toast.makeText(context, "删除成功", Toast.LENGTH_SHORT).show(); if (mChangeListData != null) mChangeListData.changedata(); } }); /* 添加对话框中取消按钮和点击事件 */ builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { } }); AlertDialog dialog = builder.create();// 获取dialog dialog.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 btnDel; } }
5.新建ChangeListData.java接口,用于删除时调用。
ChangeListData.java页面:
package cn.edu.bztc.happyidiom.minterface; public interface ChangeListData { public void changedata(); }
6.CollectActivity.java页面设置ListView的点击事件。
CollectActivity.java页面:
package cn.edu.bztc.happyidion.activity; import java.util.ArrayList; import java.util.List; import cn.edu.bztc.happyidiom.adapter.CollectAdapter; import cn.edu.bztc.happyidiom.dao.CollectDao; import cn.edu.bztc.happyidiom.entity.Animal; import cn.edu.bztc.happyidiom.minterface.ChangeListData; import cn.edu.bztc.happyidiom.util.DialogUtil; import android.os.Bundle; import android.app.Activity; import android.util.Log; import android.view.Menu; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; public class CollectActivity extends Activity { private List<Animal> collectList = new ArrayList<Animal>(); private CollectDao collectDao; private ListView lvCollect; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_collect); initAnimals(); lvCollect = (ListView) findViewById(R.id.lvCollect); final CollectAdapter collectAdapter = new CollectAdapter(this, R.layout.collect_item, collectList); lvCollect.setAdapter(collectAdapter); lvCollect.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { Animal animal = collectList.get(position); /* 定义对话框中提示语句 */ String result = animal.getName() + "\n" + animal.getPronounce() + "\n【解释】:" + animal.getExplain() + "\n【近义词】:"+ animal.getHomoionym() + "\n【反义词】:"+ animal.getAntonym() + "\n【来源】:"+ animal.getDerivation() + "\n【示例】:"+ animal.getExamples(); DialogUtil.showDialog(result, CollectActivity.this); } }); collectAdapter.setChangeListData(new ChangeListData() { /*刷新ListView*/ @Override public void changedata() { collectList.clear(); collectDao.getAllAnimals(collectList); collectAdapter.notifyDataSetChanged(); } }); } /* 获取数据库中的收藏集合 */ private void initAnimals() { collectDao = CollectDao.getInstance(this); collectDao.getAllAnimals(collectList); } }
7.修改MainActivity.java页面,一是创建了一个数据库存储收藏表,二是更改了TabHost子页面的绑定方式,原先那种运行程序只会在一开始创建页面,之后更改页面信息都不会再动态刷新,更改后收藏列表可以显示出来。
MainActivity.java页面:
package cn.edu.bztc.happyidion.activity; import cn.edu.bztc.happyidiom.db.MyDatabaseHelper; 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); createCollectDatabase(); 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,SearchActivity.class); // addTab("game",R.string.title_game,R.drawable.game,GameActivity.class); // addTab("save",R.string.title_save,R.drawable.save,CollectActivity.class); // addTab("help",R.string.title_help,R.drawable.help,StudyActivity.class); tabHost.addTab(tabHost.newTabSpec("study") .setIndicator("学习",getResources().getDrawable(R.drawable.study)) .setContent(new Intent(this, StudyActivity.class) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))); tabHost.addTab(tabHost.newTabSpec("search") .setIndicator("搜索",getResources().getDrawable(R.drawable.search)) .setContent(new Intent(this, SearchActivity.class) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))); tabHost.addTab(tabHost.newTabSpec("game") .setIndicator("游戏",getResources().getDrawable(R.drawable.game)) .setContent(new Intent(this, GameActivity.class) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))); tabHost.addTab(tabHost.newTabSpec("save") .setIndicator("收藏",getResources().getDrawable(R.drawable.save)) .setContent(new Intent(this, CollectActivity.class) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))); tabHost.addTab(tabHost.newTabSpec("help") .setIndicator("帮助",getResources().getDrawable(R.drawable.help)) .setContent(new Intent(this, StudyActivity.class) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))); } /* 创建收藏数据库 */ private void createCollectDatabase() { MyDatabaseHelper mydatabaseHelper = new MyDatabaseHelper( MainActivity.this); mydatabaseHelper.getWritableDatabase(); } /* 定义每个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; } }
8.程序源码:点击打开链接
9.运行就可以显示目标效果了。
相关文章推荐
- Android小程序-乐学成语查询(二)
- 微信公众平台订阅号申请及基础设置
- 微信公众帐号开发-自定义菜单的创建及菜单事件响应
- 微信支付遇到的坑
- 微信支付之退款
- 微信浏览器打开支付宝支付页面
- 微信表情的字符编号完整版【图文并茂哦!】
- 高仿微信对话列表滑动删除效果
- 微信URL Scheme
- java ipone 微信昵称emoji表情保存失败 无法存入数据库
- Android 微信支付&支付宝支付
- 基于微信的二次开发之连接微信接口(一)
- 微信创建自定义目录
- 微信验证所有者
- 微信支付密码为什么是六位数?
- 微信称将严厉整顿微信群红包赌博行为:已限制8000涉赌群
- 8个实用排版技巧,让微信颜值美出新高度!
- 微信打飞机子弹运动轨迹调整
- 微信支付PHP SDK —— 公众号支付代码详解
- 【Demo】微信上墙