为了学习下Activity间的消息传递,新建数据窗口采用Activity实现,当然简单点可以通过AlertDialog实现。
最终结果如下:
按menu键出现添加数据菜单选项:
点击“确定”按钮返回并将数据传回数据列表Activity
1、实现实现SQLiteOpenHelper
public class DatabaseHelper extends SQLiteOpenHelper
{
private final static String TABLE_NAME = "todo_table";
public final static String FIELD_ID = "_id";
public final static String FIELD_NUM = "todo_num";
public final static String FIELD_TEXT = "todo_text";
private final static int DATABASE_VERSION = 1;
/**
*DatabaseHelper(Context context, String name, CursorFactory factory,
*int version)
*name数据库名,factory一般传入null,否则为默认数据库,version数据库版本号
*/
public DatabaseHelper(Context context)
{
super(context, TABLE_NAME, null, DATABASE_VERSION);
}
/* 创建一个表 */
public void onCreate(SQLiteDatabase db)
{
String sql = "CREATE TABLE todo_table(_id integer primary key autoincrement,todo_num INTERGER,todo_text text)";
db.execSQL(sql);
}
/* 升级数据库 */
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
String sql = "DROP TABLE IF EXISTS " + TABLE_NAME;
db.execSQL(sql);
onCreate(db);
}
//获得游标
public Cursor getCursor()
{
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db
.query(TABLE_NAME, null, null, null, null, null, null);
return cursor;
}
//插入数据
public long insert(int num ,String text)
{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(FIELD_NUM, num);
cv.put(FIELD_TEXT, text);
long row = db.insert(TABLE_NAME, null, cv);
return row;
}
//删除数据
public void delete(int id)
{
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_NAME, FIELD_ID + " = ?", new String[]{Integer.toString(id)});
}
//更新数据
public void update(int id, int num, String text)
{
SQLiteDatabase db = this.getWritableDatabase();
String where = FIELD_ID + " = ?";
String[] whereValue = { Integer.toString(id) };
ContentValues cv = new ContentValues();
cv.put(FIELD_NUM, num);
cv.put(FIELD_TEXT, text);
db.update(TABLE_NAME, cv, where, whereValue);
}
}
2、数据列表Activity
public class MainActivity extends Activity
{
ListView lv = null;
private DatabaseHelper dbh;
private Cursor myCursor;
//当前选择的数据的_id
int selectId;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
dbh = new DatabaseHelper(this);
/* 取得DataBase里的数据 */
myCursor = dbh.getCursor();
//实例化listview
lv = (ListView) findViewById(R.id.listview);
/*new SimpleCursorAdapter并将myCursor传入,
显示数据的字段为todo_text */
SimpleCursorAdapter adapter =
new SimpleCursorAdapter
(this, android.R.layout.simple_list_item_2, myCursor, new String[]
{ DatabaseHelper.FIELD_NUM , DatabaseHelper.FIELD_TEXT }, new int[]
{ android.R.id.text1 , android.R.id.text2 });
lv.setAdapter(adapter);
//点击监听
lv.setOnItemClickListener(new OnItemClickListener()
{
final String[] menu = {"返回","删除","编辑"};
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3)
{
selectId = (int) arg3;
//获取点击项的num、text信息
myCursor.moveToPosition(arg2);
int numColumn = myCursor.getColumnIndex("todo_table."+DatabaseHelper.FIELD_NUM);
int textColumn = myCursor.getColumnIndex("todo_table."+DatabaseHelper.FIELD_TEXT);
final int num = myCursor.getInt(numColumn);
final String text = myCursor.getString(textColumn);
//显示
Log.i("selectINFO", ""+num+text);
new AlertDialog.Builder(MainActivity.this).setTitle("操作")
.setItems(menu, new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
switch (which)
{
case 0:
break;
case 1:
deleteTodo(selectId);
break;
case 2:
Intent intent = new Intent(MainActivity.this, EditActivity.class);
intent.putExtra("num", num);
intent.putExtra("text", text);
MainActivity.this.startActivityForResult(intent, 1);
break;
default:
break;
}
}
}).create().show();
}
});
}
//添加菜单
public boolean onCreateOptionsMenu(Menu menu)
{
menu.add(0, 0, 0, "添加");
menu.add(0, 1, 0, "退出");
return true;
}
//添加菜单事件
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case 0:
Intent intent = new Intent(this, EditActivity.class);
this.startActivityForResult(intent, 0);
break;
case 1:
this.finish();
break;
default:
break;
}
return true;
}
//获得另一个Activity返回的数据
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
switch (resultCode)
{
case RESULT_OK:
//添加
if(requestCode==0)
{
int num = data.getIntExtra("num", 0);
String text = data.getStringExtra("text");
addTodo(num , text);
}
//更新
if(requestCode==1)
{
int num = data.getIntExtra("num", 0);
String text = data.getStringExtra("text");
editTodo(num,text);
}
break;
default:
break;
}
}
private void editTodo(int num,String text)
{
/* 修改数据 */
dbh.update(selectId, num, text);
myCursor.requery();
lv.invalidateViews();
}
private void addTodo(int num , String text)
{
/* 添加数据到数据库 */
dbh.insert(num , text);
/* 重新查询 */
myCursor.requery();
/* 重新整理myListView */
lv.invalidateViews();
}
private void deleteTodo(int id)
{
/* 删除数据 */
dbh.delete(id);
/* 重新查询 */
myCursor.requery();
/* 重新整理myListView */
lv.invalidateViews();
}
}
3、编辑或新建数据Activity
public class EditActivity extends Activity
{
Intent intent;
EditText et1,et2;
Button bt1;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.edit);
//获得控件
et1 = (EditText) findViewById(R.id.et1);
et2 = (EditText) findViewById(R.id.et2);
bt1 = (Button) findViewById(R.id.bt1);
/* 取得Intent中的Bundle对象 */
intent = this.getIntent();
//获取传递进来的数据
int intentNum = intent.getIntExtra("num", 0);
String intentText = intent.getStringExtra("text");
//将获取到的数据显示在控件中
et2.setText(intentText);
if(intentNum == 0)
et1.setText("");
else
et1.setText(""+intentNum);
//按键监听
bt1.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
int getnum = Integer.parseInt(et1.getText().toString());
String gettext = et2.getText().toString();
intent.putExtra("num", getnum);
intent.putExtra("text", gettext);
EditActivity.this.setResult(RESULT_OK, intent);
EditActivity.this.finish();
}
});
}
}