我们已经实现了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();
}
}