【Android】大作业 功能5:删除新闻功能

新闻删除功能实现
本文介绍了一个基于Android的应用中实现新闻删除功能的方法。该应用通过对话框确认新闻删除,并实现了新闻查询、显示及删除等操作。文章详细展示了如何设计删除新闻界面、定义UI布局以及具体的实现代码。
功能5:删除新闻功能
  1. 完成内容:
    查找到某一新闻后将其删除。
  2. 需求说明:
    通过使用对话框确认删除信息。

1 定义删除新闻界面事件

DelActivity .java

package cn.com.sgmsc.news;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.graphics.Color;

import static cn.com.sgmsc.news.MyOpenHelper.*;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class DelActivity extends Activity {

	MyOpenHelper myHelper;						//声明MyOpenHelper对象
	int queryID=-1;
	int [] newsID;								//声明用于存放新闻ID的数组
    String [] newsTitle;						//声明用于存放新闻标题的数组
    int [] newsType;							//声明用于存放新闻类型的数组
    int pos = -1;								//ListView对象中的当前项位置
    ListView lv;								//声明ListView对象
    EditText et;
    final int DIALOG_DELETE = 0;				//确认删除对话框的ID
    
    BaseAdapter myAdapter = new BaseAdapter(){
		@Override
		public int getCount() {
			if(newsTitle != null){  		//如果新闻数组不为空
				return newsTitle.length;
			}
			else {
				return 0;					//如果新闻数组为空则返回0
			}
		}
		
		@Override
		public Object getItem(int arg0) {return null;}
		
		@Override
		public long getItemId(int arg0) {return 0;}
		
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			LinearLayout ll = new LinearLayout(DelActivity.this);   //创建线性布局
			ll.setOrientation(LinearLayout.HORIZONTAL);
			ll.setGravity(Gravity.CENTER_VERTICAL);
			
			//定义新闻列表的每条目的内容,包括新闻标题信息
			LinearLayout ll1 = new LinearLayout(DelActivity.this);	//创建子线性布局
			ll1.setOrientation(LinearLayout.VERTICAL);
			ll1.setLayoutParams(new LinearLayout.LayoutParams(166,LayoutParams.WRAP_CONTENT));
			ll1.setPadding(3, 0, 0, 0);								//设置边界空白
			
			TextView tvID = new TextView(DelActivity.this);
			tvID.setText("新闻ID:"+newsID[position]);
			tvID.setTextSize(10.0f);								//设置字体大小
			tvID.setTextColor(Color.WHITE);							//设置字体颜色
			
			TextView tvTitle = new TextView(DelActivity.this);		//创建用于显示新闻标题的TextView
			tvTitle.setText("新闻标题:"+newsTitle[position]);			//设置新闻标题的内容
			tvTitle.setTextSize(16.0f);								//设置字体大小
			tvTitle.setTextColor(Color.WHITE);						//设置字体颜色
			
			ll1.addView(tvTitle);									//将显示标题的TextView添加到线性布局
			ll1.addView(tvID);
			
			LinearLayout llButton = new LinearLayout(DelActivity.this); //创建子线性布局,布局按钮
			llButton.setOrientation(LinearLayout.HORIZONTAL);			
			llButton.setLayoutParams(new LinearLayout.LayoutParams
					                           (LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
			llButton.setPadding(3, 0, 3, 0);						//setPadding参数:(left, top, right, bottom)			
			llButton.setGravity(Gravity.RIGHT);
			Button btnViewNews = new Button(DelActivity.this);		//创建查看按钮
			btnViewNews.setTextAppearance(DelActivity.this, R.style.button);
			btnViewNews.setLayoutParams(new LinearLayout.LayoutParams(
					                         50, LayoutParams.WRAP_CONTENT));
			btnViewNews.setText(R.string.btnView);
			btnViewNews.setId(position);							//设置Button的ID
			btnViewNews.setOnClickListener(listenerToView);			//设置按钮的监听器
			Button btnDeleteNews = new Button(DelActivity.this);	//创建删除按钮
			btnDeleteNews.setTextAppearance(DelActivity.this, R.style.button);
			btnDeleteNews.setLayoutParams(new LinearLayout.LayoutParams(
					                            50, LayoutParams.WRAP_CONTENT));
			btnDeleteNews.setText(R.string.btnDel);
			btnDeleteNews.setId(position);							//设置Button的ID
			btnDeleteNews.setOnClickListener(listenerToDelete);		//设置按钮的监听器
			llButton.addView(btnViewNews);
			llButton.addView(btnDeleteNews);
			ll.addView(ll1);										//将子对象添加到父布局中
			ll.addView(llButton);	
			
			return ll;
		}
	};
	
	View.OnClickListener listenerToView = new View.OnClickListener() {
		@Override
		public void onClick(View v) {
			pos = v.getId();       			//取ListView当前项的ID
			Intent intent= new Intent(DelActivity.this,NewsDetailActivity.class);
			intent.putExtra("cmd", 0);		//0代表查看或修改新闻,1代表添加新闻
			intent.putExtra("id", newsID[pos]);
			startActivity(intent);
		}
	};
	View.OnClickListener listenerToDelete = new View.OnClickListener() {
		@Override
		public void onClick(View v) {
           	pos = v.getId();				//取ListView当前项的ID
			showDialog(DIALOG_DELETE);		//显示确认删除对话框,并实施相应操作
		}
	};
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_del);
		
		myHelper = new MyOpenHelper(this, DB_NAME, null, 1);//打开数据表库表
        
        lv = (ListView) findViewById(R.id.listNews); 		//获得ListView对象的引用
        et = (EditText) findViewById(R.id.etID);       		//获得新闻ID的EditText
        lv.setAdapter(myAdapter);
        
		//查询
        Button btnQuery = (Button) findViewById(R.id.btnQuery1);
        btnQuery.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				String StrID = et.getText().toString().trim();
				if(StrID.equals("")) {
					showMessage("etnull");
				}
				else {
					queryID = Integer.valueOf(StrID);
					onResume();
				}
			}
		});     
		
		//返回
        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(DelActivity.this,MenuActivity.class);
				startActivity(intent);
			}
		});  
	}
	
	@Override
	protected void onResume() {
		getBasicInfo(myHelper);  							//重新获取数据库信息
		myAdapter.notifyDataSetChanged();  					//刷新ListView
		super.onResume();
	}
	
	//创建对话框
	@Override
	protected Dialog onCreateDialog(int id) {
		Dialog dialog = null;
		switch(id){											//对对话框ID进行判断 
		case DIALOG_DELETE:									//创建删除确认对话框
			Builder b = new AlertDialog.Builder(this);	
			b.setIcon(R.drawable.dialog_delete);			//设置对话框图标
			b.setTitle("提示");								//设置对话框标题
			b.setMessage(R.string.dialog_message);			//设置对话框内容
			b.setPositiveButton(R.string.btnOk,
					new OnClickListener() {					//按下对话框的确认按钮
					@Override
						public void onClick(DialogInterface dialog, int which) {
							deleteNews(newsID[pos]);		//调用删除处理方法
						}
					});
			b.setNegativeButton(R.string.btnCancel,
					new OnClickListener() { 				//按下对话框的取消按钮
					@Override
						public void onClick(DialogInterface dialog, int which) {}
					});
					dialog = b.create();
			break;
		}
		return dialog;
	}	
		
	//方法:删除指定的新闻记录
	public void deleteNews(int id){							//id为要删除记录的id
		SQLiteDatabase db = myHelper.getWritableDatabase();	//获得数据库对象
		   try{	
		    int count=db.delete(TABLE_NAME, ID+"=?", new String[]{id+""});
		    db.close();
		    if(count == 1){									//删除成功
		    	getBasicInfo(myHelper);  					//重新获取数据库信息
		    	myAdapter.notifyDataSetChanged();  			//刷新ListView
		    }
		}catch(Exception e){
					e.printStackTrace();
		}
	}
	
	//方法:获取数据表中所有记录部分列的数据内容
    public void getBasicInfo(MyOpenHelper helper){
    	SQLiteDatabase db = helper.getWritableDatabase();	//获取数据库连接
    	Cursor c = db.query(TABLE_NAME, new String[]{ID,TITLE,TYPE}, 
    			             ID+"=?",new String[] {queryID+""}, null, null, ID);
    	int idIndex = c.getColumnIndex(ID);
    	int titleIndex = c.getColumnIndex(TITLE);			//获得标题列的列号
    	int typeIndex = c.getColumnIndex(TYPE);	    		//获得类型列的序号
    	newsID = new int[c.getCount()];						//创建存放id的int数组对象
    	newsTitle = new String[c.getCount()];				//创建存放标题的String数组对象
    	newsType = new int[c.getCount()];					//创建存放类型的String数组对象
    	int i=0;											//声明一个计数器
    	for(c.moveToFirst();!(c.isAfterLast());c.moveToNext()){
    		newsID[i] = c.getInt(idIndex);
    		newsTitle[i] = c.getString(titleIndex);			//将标题添加到String数组中
    		newsType[i] = c.getInt(typeIndex);				//将类型添加到String数组中
    		i++;
    	}
    	c.close();											//关闭Cursor对象
    	db.close();											//关闭SQLiteDatabase对象
    }
    
    public void showMessage(String str) {
    	if(str.equals("etnull"))
    		Toast.makeText(DelActivity.this, "未输入新闻ID!", Toast.LENGTH_SHORT).show();
    	else
    		Toast.makeText(DelActivity.this, "出错", Toast.LENGTH_SHORT).show();
    }
	
}

2 定义删除新闻界面UI

action_del.xml

<?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="fill_parent"
    >
    <!-- 查询框 -->
    <LinearLayout
		android:orientation="horizontal"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		>
		<TextView
		    android:paddingTop="16px"
		    android:paddingLeft="10px"
    		style="@style/detailTitle"
    		android:layout_width="80px"
    		android:layout_height="wrap_content"
    		android:text="查询ID"
        	/>

		<EditText
			android:id="@+id/etID"
			android:singleLine="true"
			style="@style/detailTitle"
			android:layout_width="140px"
			android:layout_height="wrap_content"
		/>
		<Button
			android:id="@+id/btnQuery1"
			android:text="@string/btnQuery1"
			style="@style/button"
			android:layout_width="50px"
			android:layout_height="wrap_content"
			/>
		<Button
			android:id="@+id/btnBack"
			android:text="@string/btnBack"
			style="@style/button"
			android:layout_width="50px"
			android:layout_height="wrap_content"
			/>
    </LinearLayout>
    <!-- ListView -->
    <LinearLayout
		android:orientation="vertical"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		>
		<ListView
	    	android:id="@+id/listNews"
			style="@style/content"
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:choiceMode="singleChoice"
			android:divider="@color/listDivider"
			android:dividerHeight="1px" />
	</LinearLayout>
</LinearLayout>

3 界面展示

删除新闻
删除新闻

删除新闻
删除新闻
删除新闻

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

社恐患者

赚钱不易呜呜呜

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

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

打赏作者

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

抵扣说明:

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

余额充值