真正的记事本

一个可添加文字,图文、视频的记事本。

 

今天这个小程序做的很不容易,最后终于查出来是数据库的问题。

还有就是有的时候老出现问题是应把手机中原有的程序卸载重新安装。

 

1.主页面布局

2.添加ListView的布局方式

3.页面跳转(三个button都跳转到同一个页面)

4.跳转后的页面布局

5.添加监听事件

6.建立数据库

7.建立适配器

8.实现保存按钮的功能

9.实现添加文字

10.实现三个button的区别

11.实现添加图文

12.实现添加视频

13.跳转到详情页

14.实现详情页的删除和返回

 

 

1.主页面布局



 

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.notes.MainActivity" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:orientation="horizontal">

        <Button
            android:id="@+id/text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/text" />

        <Button
            android:id="@+id/img"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/img" />

        <Button
            android:id="@+id/video"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/video" />

    </LinearLayout>

    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>

 

2.添加ListView的布局方式

新建cell.xml

<?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" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:orientation="horizontal">
        
        <ImageView 
            android:id="@+id/list_img"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        
        <ImageView 
            android:id="@+id/list_video"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:gravity="center_vertical"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/list_content"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/list_content" />

            <TextView
                android:id="@+id/list_time"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/list_time" />

        </LinearLayout>
        
    </LinearLayout>

</LinearLayout>

3.页面跳转(三个button都跳转到同一个页面)

新建addcontent.xml

新建AddContent.java

public class AddContent extends Activity{
	
	protected void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		setContentView(R.layout.addcontent);
	}

}

MainActivity.java(全新的添加监听的方法)

public class MainActivity extends Activity implements OnClickListener{
	
	private Button textbtn;
	private Button imgbtn;
	private Button videobtn;
	
	private Intent i;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		textbtn=(Button) findViewById(R.id.text);
		imgbtn=(Button) findViewById(R.id.img);
		videobtn=(Button) findViewById(R.id.video);
		
		textbtn.setOnClickListener(this);
		imgbtn.setOnClickListener(this);
		videobtn.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		i=new Intent(this,AddContent.class);
		switch(v.getId()){
		case R.id.text:
			startActivity(i);
			break;
		case R.id.img:
			startActivity(i);
			break;
		case R.id.video:
			startActivity(i);
			break;
		}
	}
}

注册!!!!

AndroidMainfest.xml

<activity 
            android:name="com.example.notes.AddContent"
            android:screenOrientation="portrait">  //设置为竖屏      
        </activity>

另外在MainActivity中也设置为竖屏

<activity
            android:name=".MainActivity"
            android:label="@string/app_name" 
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

此时运行程序,成功跳转。

 

4.跳转后的页面布局



addcontent.xml

<?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" >
    
    <ImageView 
        android:id="@+id/c_img"
        android:layout_width="300dp"
        android:layout_height="500dp"
        android:visibility="gone"/>//隐藏
    
    <VideoView 
        android:id="@+id/c_video"
        android:layout_width="300dp"
        android:layout_height="500dp"
        android:visibility="gone"/>

    <EditText
        android:id="@+id/ettext"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"//撑开布局
        android:background="@null" //去掉边框
        android:gravity="top"//将光标置于顶部
        android:hint="有了记事本,我再也不会忘记事情了"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/save"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/save" />

        <Button
            android:id="@+id/delete"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/delete" />

    </LinearLayout>

</LinearLayout>

 

5.添加监听事件

给跳转之后的页面:两个button添加监听事件,当点击时,可返回到主页面。

AddContent.java

public class AddContent extends Activity implements OnClickListener{
	
	private Button savebtn;
	private Button deletebtn;
	
	protected void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		setContentView(R.layout.addcontent);
		
		savebtn=(Button) findViewById(R.id.save);
		deletebtn=(Button) findViewById(R.id.delete);
		
		savebtn.setOnClickListener(this);
		deletebtn.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch(v.getId()){
		case R.id.save:
			finish();
			break;
		case R.id.delete:
			finish();
			break;
		}
	}
}

此时点击button,可跳转到主页面上。

 

之后的操作就比较复杂,算是我第一次接触。下面就致力于添加文字的操作。首先应该建立数据库。

 

6.建立数据库

我们先做添加文字的操作,所以数据库也只包含添加文字的字段。(之前就是因为写了图片和视频不为空,所以才一直运行不出来自己想要的结果而耽误的一天的时间,真是后悔,以后应该牢记,不能再犯类似的错误,也还好自己一直在坚持着错误,没有放弃。)

新建NotesDB.java

public class NotesDB extends SQLiteOpenHelper{
	
	public static final String TABLE_NAME="notes";
	public static final String CONTENT="content";
	public static final String ID="_id";
	public static final String TIME="time";

	public NotesDB(Context context) {
		super(context, "notes", null, 1);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		// TODO Auto-generated method stub
		db.execSQL("CREATE TABLE "+ TABLE_NAME + " (" + ID
				+ " INTEGER PRIMARY KEY AUTOINCREMENT," + CONTENT
				+ " TEXT NOT NULL," + TIME + " TEXT NOT NULL)");
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub
		
	}
}

数据库是我第一次在练习中使用,真的是被坑了好几次。

第一次因为少写了一个空格,程序一直闪退,后面又因为添加了不该添加的字段,一直达不到我想要的效果。

总之,数据库这里坑很多,写代码的时候一定要小心翼翼,该打的空格一定要打上。当程序出现异常时,也应该首先考虑数据库的问题。

记得运行一下,因为有的时候会出现无错误停止情况,这样可以方便查找问题。

 

7.建立适配器

新建MyAdapter.java

public class MyAdapter extends BaseAdapter{
	
	private Context context;
	private Cursor cursor;
	
	private LinearLayout layout;
	
	public MyAdapter(Context context,Cursor cursor){
		this.context=context;
		this.cursor=cursor;
	}
	
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return cursor.getCount();
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return cursor.getPosition();
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		LayoutInflater inflater=LayoutInflater.from(context);
		layout=(LinearLayout) inflater.inflate(R.layout.cell, null);
		
		TextView contenttv=(TextView)layout.findViewById(R.id.list_content);
		TextView timetv=(TextView) layout.findViewById(R.id.list_time);
		
		cursor.moveToPosition(position);
		
		String content=cursor.getString(cursor.getColumnIndex("content"));
		String time=cursor.getString(cursor.getColumnIndex("time"));
		
		contenttv.setText(content);
		timetv.setText(time);
		
		return layout;
	}
}

前几天在做通讯录的时候也用到了这个适配器,感觉跟那个有异曲同工之妙,所以这个代码应该多看几遍就能会了,应该不是特别难。

运行一下。

 

8.实现保存按钮的功能

AddContent.java

public class AddContent extends Activity implements OnClickListener{ 
	
	private Button savebtn;
	private Button deletebtn;
	
	private EditText ettext;
	private NotesDB notesDB;
	private SQLiteDatabase dbWriter;
    
    protected void onCreate(Bundle savedInstanceState){  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.addcontent); 
        
        savebtn=(Button) findViewById(R.id.save);
        deletebtn=(Button) findViewById(R.id.delete);
        ettext=(EditText) findViewById(R.id.ettext);
        
        savebtn.setOnClickListener(this);
        deletebtn.setOnClickListener(this);
        
        notesDB=new NotesDB(this);
        dbWriter=notesDB.getWritableDatabase();
    }

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch(v.getId()){
		case R.id.save:
			addDB();
			finish();
			break;
		case R.id.delete:
			finish();
			break;
		}
	}

	private void addDB() {
		// TODO Auto-generated method stub
		ContentValues cv=new ContentValues();
		cv.put(NotesDB.CONTENT, ettext.getText().toString());
		cv.put(NotesDB.TIME, getTime());
		dbWriter.insert(NotesDB.TABLE_NAME, null, cv);
	}

	private String getTime() {
		// TODO Auto-generated method stub
		SimpleDateFormat format=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
		Date curDate=new Date();
		String str=format.format(curDate);
		return str;
	}    
}  

 

9.实现添加文字

在主函数中调用,实现添加文字的功能。

MainActivity.java

public class MainActivity extends Activity implements OnClickListener{
	
	private Button textbtn;
	private Button imgbtn;
	private Button videobtn;
	
	private ListView lv;
	
	private Intent i;
	
	private MyAdapter adapter;
	private NotesDB notesDB;
	private SQLiteDatabase dbReader;
	
	private Cursor cursor;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		textbtn=(Button) findViewById(R.id.text);
		imgbtn=(Button) findViewById(R.id.img);
		videobtn=(Button) findViewById(R.id.video);
		
		lv=(ListView) findViewById(R.id.list);
		
		textbtn.setOnClickListener(this);
		imgbtn.setOnClickListener(this);
		videobtn.setOnClickListener(this);
		
		notesDB=new NotesDB(this);
		dbReader=notesDB.getReadableDatabase();
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		i=new Intent(this,AddContent.class);
		switch(v.getId()){
		case R.id.text:
			startActivity(i);
			break;
		case R.id.img:
			startActivity(i);
			break;
		case R.id.video:
			startActivity(i);
			break;
		}
	}
	
	public void selectDB(){
		cursor=dbReader.query(NotesDB.TABLE_NAME, null, null, null, null, null, null);
		adapter=new MyAdapter(this,cursor);
		lv.setAdapter(adapter);
	}
	
	protected void onResume(){
		super.onResume();
		selectDB();
	}
}

 哇,终于实现这个功能了。



 

10.实现三个button的区别

AddContent.java

private ImageView c_img;
private VideoView v_video;

private String val;
 protected void onCreate(Bundle savedInstanceState){  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.addcontent); 
        c_img=(ImageView) findViewById(R.id.c_img);
        v_video=(VideoView) findViewById(R.id.c_video);
        
        val=getIntent().getStringExtra("flag");
        
        initView();
    }
    private void initView() {
	// TODO Auto-generated method stub
	if(val.equals("1")){//文字
		c_img.setVisibility(View.GONE);
		v_video.setVisibility(View.GONE);
	}
	if(val.equals("2")){//图文
		c_img.setVisibility(View.VISIBLE);
		v_video.setVisibility(View.GONE);
	}
	if(val.equals("3")){//视频
		c_img.setVisibility(View.GONE);
		v_video.setVisibility(View.VISIBLE);
	}
}

 MainActivity.java

public void onClick(View v) {
		// TODO Auto-generated method stub
		i=new Intent(this,AddContent.class);
		switch(v.getId()){
		case R.id.text:
			i.putExtra("flag", "1");
			startActivity(i);
			break;
		case R.id.img:
			i.putExtra("flag", "2");
			startActivity(i);
			break;
		case R.id.video:
			i.putExtra("flag", "3");
			startActivity(i);
			break;
		}
	}

此时点击文字、图文、视频后出现不同的页面。

接下来就是实现添加图文的操作了。

11.实现添加图文

首先在数据库中添加图片字段。

数据库啊,一定不能忘记。

NotesDB.java

public static final String PATH="path";
public void onCreate(SQLiteDatabase db) {
		// TODO Auto-generated method stub
		db.execSQL("CREATE TABLE "+ TABLE_NAME + " (" + ID
				+ " INTEGER PRIMARY KEY AUTOINCREMENT," + CONTENT
				+ " TEXT NOT NULL," + PATH + " TEXT NOT NULL," + TIME 
				+ " TEXT NOT NULL)");
	}

添加PATH字段后,卸载后重新运行后,添加文字不会显示到主界面上,此时不要紧张,因为我们设置了PATH字段不为空,无法显示是正常的。继续我们的操作。

AddContent.java

private File phoneFile;

  

private void initView() {
		// TODO Auto-generated method stub
		if(val.equals("1")){//文字
			c_img.setVisibility(View.GONE);
			v_video.setVisibility(View.GONE);
		}
		if(val.equals("2")){//图文
			c_img.setVisibility(View.VISIBLE);
			v_video.setVisibility(View.GONE);
			
			Intent iimg=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
			phoneFile=new File(Environment.getExternalStorageDirectory()
					.getAbsoluteFile()+"/"+getTime()+".jpg");
			iimg.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(phoneFile));
			startActivityForResult(iimg,1);
		}
		if(val.equals("3")){//视频
			c_img.setVisibility(View.GONE);
			v_video.setVisibility(View.VISIBLE);
		}
	}
private void addDB() {
		// TODO Auto-generated method stub
		ContentValues cv=new ContentValues();
		cv.put(NotesDB.CONTENT, ettext.getText().toString());
		cv.put(NotesDB.TIME, getTime());
		cv.put(NotesDB.PATH, phoneFile+"");
		dbWriter.insert(NotesDB.TABLE_NAME, null, cv);
	}

 

protected void onActivityResult(int requestCode,int resultCode,Intent data){
		super.onActivityResult(requestCode, resultCode, data);
		if(requestCode==1){
			Bitmap bitmap=BitmapFactory.decodeFile(phoneFile.getAbsolutePath());
			c_img.setImageBitmap(bitmap);
		}
	}

MyAdapter.java

public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		LayoutInflater inflater=LayoutInflater.from(context);
		layout=(LinearLayout) inflater.inflate(R.layout.cell, null);
		
		TextView contenttv=(TextView)layout.findViewById(R.id.list_content);
		TextView timetv=(TextView) layout.findViewById(R.id.list_time);
		ImageView imgiv=(ImageView) layout.findViewById(R.id.list_img);
		
		cursor.moveToPosition(position);
		
		String content=cursor.getString(cursor.getColumnIndex("content"));
		String time=cursor.getString(cursor.getColumnIndex("time"));
		String url=cursor.getString(cursor.getColumnIndex("path"));
		
		contenttv.setText(content);
		timetv.setText(time);
		imgiv.setImageBitmap(getImageThumbnail(url,200,200));
		
		return layout;
	}

        //获取缩略图
	private Bitmap getImageThumbnail(String uri, int width, int height) {
		// TODO Auto-generated method stub
		Bitmap bitmap=null;
		BitmapFactory.Options options=new BitmapFactory.Options();
		options.inJustDecodeBounds=true;
		bitmap=BitmapFactory.decodeFile(uri, options);
		options.inJustDecodeBounds=false;
		int beWidth=options.outWidth/width;
		int beHeight=options.outHeight/height;
		int be=1;
		if(beWidth<beHeight){
			be=beWidth;
		}
		else{
			be=beHeight;
		}
		if(be<=0){
			be=1;
		}
		options.inSampleSize=be;
		bitmap=BitmapFactory.decodeFile(uri, options);
		bitmap=ThumbnailUtils.extractThumbnail(bitmap, width, height,
				ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
		return bitmap;
	}

此时运行程序就可成功添加图片了。

 

12.实现添加视频

第一步当然还是在数据库中添加相应的字段。

NotesDB.java

public static final String VIDEO="video";

 

public void onCreate(SQLiteDatabase db) {
		// TODO Auto-generated method stub
		db.execSQL("CREATE TABLE "+ TABLE_NAME + " (" + ID
				+ " INTEGER PRIMARY KEY AUTOINCREMENT," + CONTENT
				+ " TEXT NOT NULL," + PATH + " TEXT NOT NULL," + VIDEO
				+ " TEXT NOT NULL," + TIME + " TEXT NOT NULL)");
	}

此时运行添加文字是不会出现在主界面上的。

AddContent.java

private File videoFile;

 

private void initView() {
		// TODO Auto-generated method stub
		if(val.equals("1")){//文字
			c_img.setVisibility(View.GONE);
			v_video.setVisibility(View.GONE);
		}
		if(val.equals("2")){//图文
			c_img.setVisibility(View.VISIBLE);
			v_video.setVisibility(View.GONE);
			
			Intent iimg=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
			phoneFile=new File(Environment.getExternalStorageDirectory()
					.getAbsoluteFile()+"/"+getTime()+".jpg");
			iimg.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(phoneFile));
			startActivityForResult(iimg,1);
		}
		if(val.equals("3")){//视频
			c_img.setVisibility(View.GONE);
			v_video.setVisibility(View.VISIBLE);
			Intent video=new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
			videoFile=new File(Environment.getExternalStorageDirectory()
					.getAbsoluteFile()+"/"+getTime()+".mp4");
			video.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(videoFile));
			startActivityForResult(video,2);
		}
	}
private void addDB() {
		// TODO Auto-generated method stub
		ContentValues cv=new ContentValues();
		cv.put(NotesDB.CONTENT, ettext.getText().toString());
		cv.put(NotesDB.TIME, getTime());
		cv.put(NotesDB.PATH, phoneFile+"");
		cv.put(NotesDB.VIDEO, videoFile+"");
		dbWriter.insert(NotesDB.TABLE_NAME, null, cv);
	}

  

protected void onActivityResult(int requestCode,int resultCode,Intent data){
		super.onActivityResult(requestCode, resultCode, data);
		if(requestCode==1){
			Bitmap bitmap=BitmapFactory.decodeFile(phoneFile.getAbsolutePath());
			c_img.setImageBitmap(bitmap);
		}
		if(requestCode==2){
			v_video.setVideoURI(Uri.fromFile(videoFile));
			v_video.start();//播放视频
		}
	}

MyAdapter.java

public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		LayoutInflater inflater=LayoutInflater.from(context);
		layout=(LinearLayout) inflater.inflate(R.layout.cell, null);
		
		TextView contenttv=(TextView)layout.findViewById(R.id.list_content);
		TextView timetv=(TextView) layout.findViewById(R.id.list_time);
		ImageView imgiv=(ImageView) layout.findViewById(R.id.list_img);
		ImageView videoiv=(ImageView) layout.findViewById(R.id.list_video);
		
		cursor.moveToPosition(position);
		
		String content=cursor.getString(cursor.getColumnIndex("content"));
		String time=cursor.getString(cursor.getColumnIndex("time"));
		String url=cursor.getString(cursor.getColumnIndex("path"));
		String urlvideo=cursor.getString(cursor.getColumnIndex("video"));
		
		contenttv.setText(content);
		timetv.setText(time);
		imgiv.setImageBitmap(getImageThumbnail(url,200,200));
		videoiv.setImageBitmap(getVideoThumbnail(urlvideo,200,200,
				MediaStore.Images.Thumbnails.MICRO_KIND));
		
		return layout;
	}

 

//获取缩略图
private Bitmap getVideoThumbnail(String uri,int width,int height,int kind) {
	// TODO Auto-generated method stub
	Bitmap bitmap=null;
	bitmap=ThumbnailUtils.createVideoThumbnail(uri, kind);
	bitmap=ThumbnailUtils.extractThumbnail(bitmap, width, height,
			ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
	return bitmap;
}

成功添加,真不容易啊!

 

13.跳转到详情页

第一次碰到这种ListView的跳转,是用一种全新的监听方法。

首先新建select.xml

然后新建SelectAct.java

 

public class SelectAct extends Activity{
	
	protected void onCreate(Bundle saveInstanceState){
		super.onCreate(saveInstanceState);
		setContentView(R.layout.select);
	}
}
MainActivity.java

 

private ListView lv;
protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		lv=(ListView) findViewById(R.id.list);
		
		lv.setOnItemClickListener(new OnItemClickListener(){

			@Override
			public void onItemClick(AdapterView<?> parent, View view, 
int positon, long id) {
				// TODO Auto-generated method stub
				Intent i=new Intent(MainActivity.this,SelectAct.class);
				startActivity(i);
			}
			
		});
	}
注册,注册!!!

AndroidManifest.xml

 

<activity 
            android:name="SelectAct"
            android:screenOrientation="portrait">
        </activity>
当然,此时跳转过去只是一个空白的页面,我们最起码要做到把之前添加的内容显示到新页面上。

MainActivity.java

 

lv.setOnItemClickListener(new OnItemClickListener(){

	@Override
	public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
		// TODO Auto-generated method stub
		cursor.moveToPosition(position);
		Intent i=new Intent(MainActivity.this,SelectAct.class);
		i.putExtra(NotesDB.ID, 
			cursor.getInt(cursor.getColumnIndex(NotesDB.ID)));
		i.putExtra(NotesDB.CONTENT, cursor.getString(cursor
			.getColumnIndex(NotesDB.CONTENT)));
		i.putExtra(NotesDB.TIME,
			cursor.getString(cursor.getColumnIndex(NotesDB.TIME)));
		i.putExtra(NotesDB.PATH,
			cursor.getString(cursor.getColumnIndex(NotesDB.PATH)));
		i.putExtra(NotesDB.VIDEO, 
			cursor.getString(cursor.getColumnIndex(NotesDB.VIDEO)));
		startActivity(i);
	}			
});
 select.xml
<?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" >
    
    <ImageView 
        android:id="@+id/s_img"
        android:layout_width="300dp"
        android:layout_height="500dp"
        android:visibility="gone"/>
    
    <VideoView 
        android:id="@+id/s_video"
        android:layout_width="300dp"
        android:layout_height="500dp"
        android:visibility="gone"/>

    <TextView
        android:id="@+id/s_tv"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" />

</LinearLayout>
SelectAct.java
public class SelectAct extends Activity{
	
	private ImageView s_img;
	private VideoView s_video;
	private TextView s_tv;
	
	
	protected void onCreate(Bundle saveInstanceState){
		super.onCreate(saveInstanceState);
		setContentView(R.layout.select);
		
		s_img=(ImageView) findViewById(R.id.s_img);
		s_video=(VideoView) findViewById(R.id.s_video);
		s_tv=(TextView) findViewById(R.id.s_tv);
		
		if(getIntent().getStringExtra(NotesDB.PATH).equals("null")){
			s_img.setVisibility(View.GONE);
		}
		else{
			s_img.setVisibility(View.VISIBLE);
		}
		
		if(getIntent().getStringExtra(NotesDB.VIDEO).equals("null")){
			s_video.setVisibility(View.GONE);
		}
		else{
			s_video.setVisibility(View.VISIBLE);
		}
		
		s_tv.setText(getIntent().getStringExtra(NotesDB.CONTENT));
		
		Bitmap bitmap=BitmapFactory.decodeFile(getIntent()
.getStringExtra(NotesDB.PATH));
		s_img.setImageBitmap(bitmap);
		s_video.setVideoURI(Uri.parse(getIntent().getStringExtra(NotesDB.VIDEO)));
		s_video.start();
	}
}
此时运行便可达到想要的效果

 

14.实现详情页的删除和返回

先在select.xml中添加button

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:orientation="horizontal">

        <Button
            android:id="@+id/s_delete"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/s_delete" />

        <Button
            android:id="@+id/s_back"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/s_back" />

    </LinearLayout>

给两个buttton添加监听事件

和之前的保存和取消是一样的,当点击按钮时回到主界面。

SelectAct.java

 

public class SelectAct extends Activity implements OnClickListener{
	
	private Button s_delete;
	private Button s_back;
	
	protected void onCreate(Bundle saveInstanceState){
		super.onCreate(saveInstanceState);
		setContentView(R.layout.select);
		s_delete=(Button) findViewById(R.id.s_delete);
		s_back=(Button) findViewById(R.id.s_back);
		
		s_delete.setOnClickListener(this);
		s_back.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch(v.getId()){
		case R.id.s_delete:
			finish();
			break;
		case R.id.s_back:
			finish();
			break;
		}
	}
}
运行成功。 接下来就是实现删除的功能,这里会涉及到数据库。
public class SelectAct extends Activity implements OnClickListener{
	
	private NotesDB notesDB;
	private SQLiteDatabase dbWriter;
	
	protected void onCreate(Bundle saveInstanceState){
		super.onCreate(saveInstanceState);
		setContentView(R.layout.select);	
		
		notesDB=new NotesDB(this);
		dbWriter=notesDB.getWritableDatabase();
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch(v.getId()){
		case R.id.s_delete:
			deleteDate();
			finish();
			break;
		case R.id.s_back:
			finish();
			break;
		}
	}

	private void deleteDate() {
		// TODO Auto-generated method stub
		dbWriter.delete(NotesDB.TABLE_NAME, 
				"_id=" + getIntent().getIntExtra(NotesDB.ID, 0), null);
	}
}

 历经两天的辛苦操作,终于做完了这个。

 

 

 

猜你喜欢

转载自dingfan.iteye.com/blog/2384756