- 完成内容:
实现数据的保存和读取。数据内容包括:
(1)新闻ID
(2)新闻标题
(3)新闻类型
(4)新闻内容 - 需求说明:
(1)创建新闻信息的布局文件。
(2)编写新闻对象。
(3)编写实现保存读取新闻信息的Activity类。
(4)采用SQLite数据库存取方法存放新闻信息。
1 定义添加新闻界面事件
NewsDetailActivity .java
package cn.com.sgmsc.news;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.BaseAdapter;
import android.widget.AdapterView.OnItemSelectedListener;
import static cn.com.sgmsc.news.MyOpenHelper.*;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class NewsDetailActivity extends Activity {
Spinner typeSP = null; //显示新闻类型
EditText etNewsTitle = null; //显示新闻标题
EditText etNewsContent = null; //显示新闻内容
int status = -1; //0:查看或修改新闻;1:添加新闻
MyOpenHelper myHelper;
int id = -1; //记录当前显示的新闻的id
String [] NewsInfo = null; //记录新闻信息
int typeSelectedID= -1; //类型ID
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_news_detail);
etNewsTitle = (EditText) findViewById(R.id.etNewsTitle);
etNewsContent = (EditText) findViewById(R.id.etNewsContent);
typeSP = (Spinner) findViewById(R.id.spinnerType);
//实例化ArrayAdapter
ArrayAdapter<CharSequence> adapter =ArrayAdapter.createFromResource(
this,
R.array.types,
android.R.layout.simple_spinner_item);
//设置Spinner的下拉列表显示样式
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//将adapter添加到Spinner中
typeSP.setAdapter(adapter);
//设置Spinner的一些属性
typeSP.setPrompt("请选择新闻类型:");
typeSP.setSelection(0,true);
//添加Spinner事件监听
typeSP.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) {
//设置显示当前选择的项
typeSelectedID = arg2;
arg0.setVisibility(View.VISIBLE);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
myHelper = new MyOpenHelper(this,MyOpenHelper.DB_NAME,null,1);
Intent intent = getIntent();
status = intent.getExtras().getInt("cmd");//读取命令类型
switch(status) {
case 0: //查看新闻的详细信息
id = intent.getExtras().getInt("id"); //获得要显示的新闻的id
SQLiteDatabase db = myHelper.getWritableDatabase();
Cursor c = db.query(MyOpenHelper.TABLE_NAME,
new String[]{TITLE,TYPE,CONTENT},
ID+"=?",
new String[]{id+""}, null, null, null);
if(c.getCount() == 0){ //没有查询到指定的新闻
//显示没有找到指定的日志信息
}
else{ //查询到了新闻
c.moveToFirst(); //移动到第一条记录
etNewsTitle.setText(c.getString(0));
typeSP.setSelection(c.getInt(1), true); //设置指定的类型
etNewsContent.setText(c.getString(2));
}
c.close();
db.close();
break;
case 1: //新建新闻的详细信息
etNewsTitle.getEditableText().clear(); //清空EditText项
etNewsContent.getEditableText().clear();
typeSP.setSelection(0, true); //将类型设置为第一个类型
break;
}
//“查看”按钮定义
Button btnModifyNews = (Button)findViewById(R.id.btnModifyNews);
btnModifyNews.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String modifyTitle = etNewsTitle.getEditableText().toString().trim();
//取出EditText中标题的内容
String modifyContent = etNewsContent.getEditableText().toString().trim();
if(modifyContent.equals("") || modifyTitle.equals("")){ //如果标题或内容为空则提示
//提示需要将标题或内容填写完整
showMessage("etnull");
return;
}
switch(status){ //判断当前的状态
case 0: //编辑或查看已有日志时
updateNews(); //调用更新日志方法
break;
case 1: //新建日志时
insertNews(); //调用插入日志方法
break;
}
//返回到日志列表Activity
Intent intent = new Intent(NewsDetailActivity.this,MenuActivity.class);
intent.putExtra("id", id);
startActivity(intent);
}
});
//“返回”按钮定义
Button btnBack = (Button) findViewById(R.id.btnBack);
btnBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(NewsDetailActivity.this,MenuActivity.class);
intent.putExtra("id", id);
startActivity(intent);
}
});
}
//方法:更新某个日志
public void updateNews(){
SQLiteDatabase db = myHelper.getWritableDatabase(); //获得数据库对象
ContentValues values = new ContentValues();
values.put(TITLE, etNewsTitle.getText().toString());
values.put(TYPE, typeSelectedID);
values.put(CONTENT, etNewsContent.getText().toString());
db.update(TABLE_NAME, values, ID+"=?", new String[]{id+""});//更新数据库
db.close();
}
//方法:添加日志
public void insertNews(){
SQLiteDatabase db = myHelper.getWritableDatabase(); //获得数据库对象
ContentValues values = new ContentValues();
values.put(TITLE, etNewsTitle.getText().toString());
values.put(TYPE, typeSelectedID);
values.put(CONTENT, etNewsContent.getText().toString());
db.insert(TABLE_NAME, ID, values); //插入数据
db.close();
}
//提示信息
public void showMessage(String str) {
if(str.equals("etnull"))
Toast.makeText(NewsDetailActivity.this, "未输入新闻标题或内容!", Toast.LENGTH_SHORT).show();
}
}
2 定义添加新闻界面UI
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="match_parent"
>
<!-- 标题部分 -->
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<TextView
android:text="@string/tvTitle"
style="@style/detailTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<EditText
android:id="@+id/etNewsTitle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:singleLine="true"
/>
</LinearLayout>
<!-- 类型部分 -->
<LinearLayout
android:orientation="horizontal"
android:paddingLeft="3dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
>
<TextView
style="@style/detailTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/tvType" /> <!-- 日期时间部分 -->
<Spinner
android:id="@+id/spinnerType"
style="@style/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
> <!-- 内容部分 -->
<EditText
android:id="@+id/etNewsContent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="vertical"
android:gravity="top"
android:hint="@string/hintNewsContent"
/>
</LinearLayout>
<!-- 按钮部分 -->
<LinearLayout
android:orientation="horizontal"
android:gravity="bottom"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<Button
android:id="@+id/btnModifyNews"
style="@style/button"
android:layout_width="120px"
android:layout_height="wrap_content"
android:text="@string/btnMod" />
<Button
android:id="@+id/btnBack"
style="@style/button"
android:text="@string/btnBack"
android:layout_width="120px"
android:layout_height="wrap_content"
/>
</LinearLayout>
</LinearLayout>
界面展示