安卓小日记练习(8)listview的另一个item点击事件的界面和数据保存

本文介绍了一个简单的日记应用程序中如何使用Android内置的方法实现数据的存储与读取。通过使用EditText控件来输入日记内容,并利用openFileOutput方法将内容保存到设备上。此外,还实现了从文件加载已有内容的功能。
摘要由CSDN通过智能技术生成

          我们已经实现了listview的其中一种item的点击事件,和初步实现了第二种item点击之后的数据传递。现在我们要写日记所以需要edittext控件,和进一步完善控件,以及数据(edit的内容)的保存。我们这里采取文件保存的方式。

          注:本篇文章中关于数据存储到文件功能的代码主要参考自《第一行代码》

         


点击主界面的小黑点之后,要跳转到这个界面我们需要一个eidttext控件,这个布局不复杂,最后一排是一个水平的基本layout,两个可点击的图片。

先看布局文件代码:

<?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_marginTop="12dip"
            android:id="@+id/showup2"
            android:layout_width="match_parent"
            android:layout_height="40dip"
            android:orientation="horizontal" >
   
        <View
            android:layout_width="0dp"
            android:layout_weight="2.5"
            android:layout_height="0dp"
            />
    	     
        <TextView 
       	    android:id="@+id/show_week2"
            android:layout_height="20dip"
            android:layout_width="wrap_content"
            android:layout_weight="1"
            android:textStyle="bold"
            />
        
        <ImageView
                android:layout_height="15dip"
                android:layout_width="wrap_content"
                android:layout_weight="1"
                android:src="@drawable/divi2"
                />
        
        <TextView 
       	    android:id="@+id/show_month2"
            android:layout_height="20dip"
            android:layout_width="wrap_content"
            android:layout_weight="1"
            android:textStyle="bold"
            />
        <View
            android:layout_width="0dp"
            android:layout_weight="0.5"
            android:layout_height="0dp"
            />
        
        <TextView 
       	    android:id="@+id/show_day2"
            android:layout_height="20dip"
            android:layout_width="wrap_content"
            android:layout_weight="1"
            android:textStyle="bold"
            />
        
        
         <ImageView
                android:layout_height="15dip"
                android:layout_width="wrap_content"
                android:layout_weight="1"
                android:src="@drawable/divi2"
                />
         
          <TextView 
       	    android:id="@+id/show_year2"
            android:layout_height="20dip"
            android:layout_width="wrap_content"
            android:layout_weight="1"
            android:textStyle="bold"
            />
        
        <View
            android:layout_width="0dp"
            android:layout_weight="3"
            android:layout_height="0dp"
            />
       
   </LinearLayout>
   
    <ImageView
        android:layout_height="5dip"
       	android:gravity="center"
        android:layout_width="wrap_content"
        android:src="@drawable/longlong"
        />
	
	<EditText
	    android:id = "@+id/edit_text"
	    android:layout_width="match_parent"
	    android:layout_height="300dip" 
	    />
	
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="15dip" 
        android:orientation="horizontal"
        >
        <ImageView
            android:src="@drawable/clock"
            android:id="@+id/idclock"
            android:layout_height="15dip"
            android:layout_width="wrap_content"
            android:layout_weight="1"
            android:clickable = "true"
            />
        <View
            android:layout_height="15dip"
            android:layout_width="wrap_content"
            android:layout_weight="8"
            />
        <ImageView
            android:src="@drawable/done"
            android:id="@+id/iddone"
            android:layout_height="15dip"
            android:layout_width="wrap_content"
            android:layout_weight="1"
            android:clickable = "true"
            />
        
        </LinearLayout>
	
</LinearLayout>

之后我们动态获取edittext,同时监听右下角done的点击事件。我们要把edittext的内容保存到文件,就需要用到openFileOutput 方法,我用java的一套io方法时出现了文件打不开的问题,所以最好还是用openFileOutput,后面就是java io的部分了,可以缓冲包裹起来,整个流程就可以使用java io的一系列方法。

注意!在传入文件的时候,一定不要带路径!会报错,这是安卓,不是java在本地运行,我之前就是绝对路径会报错,这里只需要一个文件名,它会自动保存到默认路径,在ddms中可以找到,打开就可以看到文件里就是我们写入的内容。

我们右下角done的功能是,点击之后保存数据到文件,并且回退。

我们这里设置读取文件里的信息,并动态设置edittext的值,通过回退之后再进入,证明数据的读取过程是成功的。

活动代码:

package com.example.littled;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class EditActivity extends Activity {
	private EditText edit;
	
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_edit);
		edit = (EditText)findViewById(R.id.edit_text);
		String inputText = load();
		Intent intent = getIntent();
		
		String w = intent.getStringExtra("week2");
		
		if(w == "MON")
			w = "MONDAY";
		else if(w == "TUE")
			w = "TUESDAY";
		else if(w == "WED")
			w = "WEDNESDAY";
		else if(w == "THR")
			w = "THRUTHDAY";
		else if(w == "FRI")
			w = "FRIDAY";
		else if(w == "SAT")
			w = "SATURDAY";
		else if(w == "SUN")
			w = "SUNDAY";
			
			
		TextView tv1 = (TextView)findViewById(R.id.show_week2);
		tv1.setText(w);
	
		String m = intent.getStringExtra("month2");
		TextView tv2 = (TextView)findViewById(R.id.show_month2);
		tv2.setText(m);
		
		String da = intent.getStringExtra("day2");
		TextView tv3 = (TextView)findViewById(R.id.show_day2);
		tv3.setText(da);
	
		String y = intent.getStringExtra("year2");		
		TextView tv4 = (TextView)findViewById(R.id.show_year2);
		tv4.setText(y);
		
		ImageView iv =(ImageView)findViewById(R.id.iddone);
		iv.setOnClickListener(new View.OnClickListener()
        {
        	@Override
        	public void onClick(View v)
        	{
        		String inputText = edit.getText().toString();
        		save(inputText);
        		finish();
        	}
        });
		
		
		if(!TextUtils.isEmpty(inputText))
		{
			edit.setText(inputText);
			edit.setSelection(inputText.length());
			Toast.makeText(this,"Restoring succeeded",Toast.LENGTH_SHORT);
		}
	}
	
	public void save(String inputText)
	{
		FileOutputStream out = null;
		BufferedWriter writer = null;
		try{
			out = openFileOutput("data",Context.MODE_PRIVATE);
			writer = new BufferedWriter(new OutputStreamWriter(out));
			writer.write(inputText);
		}
		catch(IOException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				if(writer != null)
					writer.close();
			}
			catch(IOException e)
			{
				e.printStackTrace();
			}
		}
	}

	public String load()
	{
		FileInputStream in = null;
		BufferedReader reader = null;
		StringBuilder content = new StringBuilder();
		try{
			in = openFileInput("data");
			reader = new BufferedReader(new InputStreamReader(in));
			String line = "";
			while((line = reader.readLine())!=null)
			{
				content.append(line);
			}
		}
		catch(IOException e)
		{
			e.printStackTrace();
		}
		finally
		{
			if(reader != null){
				try{
					reader.close();
				}
			catch(IOException e)
			{
				e.printStackTrace();
			}
		}
	}
	return content.toString();
	}
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值