首先是收藏数据库构成
先建立一个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了 全部实现了