cookbook第4章 收藏功能实现

首先是收藏数据库构成

先建立一个DBHelper

package com.example.cookbook.data;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBHelper extends SQLiteOpenHelper{
		
		public DBHelper(Context context)
		{
			super(context,"collectcook.db",null,2);
		}
		public void onCreate(SQLiteDatabase db)
		{
			db.execSQL("create table cooks (_id integer primary key autoincrement,cookname varchar(100) unique)");
		}
		public void onUpgrade(SQLiteDatabase db,int oldversion,int newversion)
		{
			db.execSQL("create table cooks (_id integer primary key autoincrement,cookname varchar(100) unique)");
		}

	}

然后再建立数据库操作

package com.example.cookbook.data;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class CollectCooksDAO {

		private DBHelper dbhelper;
		public CollectCooksDAO(Context context)
		{
			dbhelper=new DBHelper(context);
		}
		public boolean find(String cookname)
		{
			boolean result=false;
			SQLiteDatabase db=dbhelper.getReadableDatabase();
			Cursor cursor=db.rawQuery("select cookname from cooks where cookname=?",new String[]{cookname});
			while(cursor.moveToNext())
			{
				result=true;
			}
			cursor.close();
			db.close();
			return result;
		}
		public void add(String cookname)
		{
			if(find(cookname))
			{
				return;
			}
			SQLiteDatabase db=dbhelper.getWritableDatabase();
			if(db.isOpen())
			{
				db.execSQL("insert into cooks(cookname) values(?)",new Object[]{cookname});
				db.close();
			}
			
		}
		public void delete(String name)
		{
			SQLiteDatabase db=dbhelper.getWritableDatabase();
			if(db.isOpen())
			{
				db.execSQL("delete from cooks where cookname=?",new Object[]{name});
				db.close();
			}
		}
		public List<String> getAllname()
		{
			SQLiteDatabase db=dbhelper.getReadableDatabase();
			List<String> names=new ArrayList<String>();
			if(db.isOpen())
			{
				Cursor cursor=db.rawQuery("select cookname from cooks", null);
				while(cursor.moveToNext())
				{
					String name=cursor.getString(0);
					names.add(name);
				}
				cursor.close();
				db.close();
			}
			return names;
		}
	}

接下来就是收藏界面了

<?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" >

    <ListView
        android:id="@+id/collectview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fadingEdge="vertical"
        android:divider="@color/yellow"
        android:dividerHeight="5dp" >
    </ListView>

</LinearLayout>

照样是个很简单的listview;

接下来是收藏功能实现:

package com.example.cookbook;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import com.example.cookbook.data.CBInfo;
import com.example.cookbook.data.CBInfoRead;
import com.example.cookbook.data.CollectCooksDAO;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.AssetManager;
import android.content.res.Resources;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class Collect extends Activity{
	
	private MyAdapters adapter;
	private List<CBInfo> infos=null;
	private List<CBInfo> tempinfos;
	private ListView lv;
	private List<String> names;
	private static final int complete=0;
	private AssetManager am;
	private CollectCooksDAO ccd;
	private String name;
	private static final int ok=0;

	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.collectview);
		
        lv=(ListView)findViewById(R.id.collectview);
        ccd=new CollectCooksDAO(this);
        names=new ArrayList<String>();
        names=ccd.getAllname();
		infos=new ArrayList<CBInfo>();
		tempinfos=new ArrayList<CBInfo>();
		adapter=new MyAdapters(this,infos);
}
	public void onResume()
	{
		super.onResume();
		ccd=new CollectCooksDAO(this);
        names=new ArrayList<String>();
        names=ccd.getAllname();
		infos=new ArrayList<CBInfo>();
		tempinfos=new ArrayList<CBInfo>();
		adapter=new MyAdapters(this,infos);
	
	    CBInfo info=new CBInfo();
	    CBInfoRead read=new CBInfoRead(Collect.this);
	    try 
		   {
			tempinfos=read.getAllCooks();
		   } 
		   catch (Throwable e) 
		   {
			// TODO Auto-generated catch block
			e.printStackTrace();
			}
	    for(int i=0;i<tempinfos.size();i++)
		{
			info=tempinfos.get(i);
			if(names.contains(info.getName()))
			{
				infos.add(info);
				name=info.getName();
			}
		}
	    lv.setAdapter(adapter);
		
		lv.setOnItemClickListener(new OnItemClickListener(){
			public void onItemClick(AdapterView<?> parent,View view,int position,long id)
			{
				CBInfo info=new CBInfo();
				info=infos.get(position);
				Intent intent=new Intent(Collect.this,CookView.class);
				Bundle bundle=new Bundle();
				bundle.putSerializable("info", info);
				intent.putExtras(bundle);
				startActivity(intent);
			}
		});
		lv.setOnItemLongClickListener(new OnItemLongClickListener(){
				public boolean onItemLongClick(AdapterView<?> parent,View view,int position,long id)
				{
					CBInfo info=new CBInfo();
					info=infos.get(position);
					infos.remove(info);
					String name=info.getName();
					ccd.delete(name);
					adapter.notifyDataSetChanged();
					Toast.makeText(getApplicationContext(), "您已取消了收藏", Toast.LENGTH_SHORT).show();
					return true;
				}
		});
		
	}
	public void onChange(boolean selfChange)
	{
		adapter.notifyDataSetChanged();
	}
	public void onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo menuInfo)
	{
		super.onCreateContextMenu(menu, v, menuInfo);
		MenuInflater inflater=getMenuInflater();
		inflater.inflate(R.menu.contextmenu, menu);
	}
	public boolean onContextItemSelected(MenuItem item)
	{
		AdapterContextMenuInfo info=(AdapterContextMenuInfo)item.getMenuInfo();
		switch(item.getItemId())
		{
		case R.id.delete_from_collect:
			String name=infos.get((int)info.id).getName();
			ccd.delete(name);
			adapter.notifyDataSetChanged();
			break;
		default:
			break;
		}
		return super.onContextItemSelected(item);
	}

}

好了OK了 全部实现了



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值