【Android】大作业 功能3:添加新闻信息功能

功能3:添加新闻信息功能
  1. 完成内容:
    实现数据的保存和读取。数据内容包括:
    (1)新闻ID
    (2)新闻标题
    (3)新闻类型
    (4)新闻内容
  2. 需求说明:
    (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>

界面展示

添加新闻
添加新闻

添加新闻
添加新闻

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

社恐患者

赚钱不易呜呜呜

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值