我们新建了一个活动,界面是list,有一个下栏(下栏先不管他),我们先来看list。
点击主界面右下方的横条之后,进入这个活动,并传递数据。
以上是点击主界面之后,进入的活动的界面,list的数据是从文件里面取得的(不是在这个活动里手动添加的)
思路:设置主界面右下方小横条的点击事件,启动活动,并且把list(里面的对象是序列化的(序列化就是实现序列化的接口))保存到文件,然后另一个活动从文件中直接取出list,然后通过适配器来给list的item传入数据。
关于文件读取部分:参考上一篇博文。折腾FILE流的方法一天,也是遇到无数的异常,小结两点:一个是注意方法的选择,一个是注意只要文件名,不要路径!
序列化就是实现接口:
public class Day implements Serializable{
private String day;
private String week;
private String detail;
private static final long serialVersionUID = -3450064362986273896L;
public Day(String week, String day, String detail)
{
this.day = day;
this.week = week;
this.detail = detail;
}/*
public Day(String detail)
{
this.detail = detail;
}*/
public String getDay()
{
return day;
}
public String getWeek()
{
return week;
}
public String getDetail()
{
return detail;
}
public void setWeek(String week)
{
this.week = week;
}
public void setDay(String day)
{
this.day = day;
}
public void setDetail()
{
this.detail = detail;
}
}
新活动的布局,listitem的子布局,适配器,都如出一辙,就不贴代码了。
注意看MainActivity 和 MonthActivity里面的关键部分:
MainActivity:
//读写文件
public void save(ArrayList list)//存数据
{
FileOutputStream out = null;
try
{
out = openFileOutput("foo",Context.MODE_PRIVATE);
//writer = new BufferedWriter(new OutputStreamWriter(out));
//writer.write(day);
ObjectOutputStream oos = new ObjectOutputStream(out);
oos.writeObject(list);
oos.close();
out.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
启动活动,并且存入文件:
iv1 = (ImageView)findViewById(R.id.image_view8);
iv1.setOnClickListener(new View.OnClickListener() //启动当月日记浏览的活动
{
@Override
public void onClick(View v)
{
Intent intent = new Intent(MainActivity.this,MonthActivity.class);
startActivity(intent);
save(daylist);
}
});
再来看启动的MonthActivity:
public ArrayList load() //取数据
{
ArrayList list = new ArrayList();
FileInputStream in = null;
//BufferedReader reader = null;
//StringBuilder content = new StringBuilder();
try{
in = openFileInput("foo");
ObjectInputStream ois = new ObjectInputStream(in);
list = (ArrayList) ois.readObject();
ois.close();
in.close();
}
catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return list;
}
从文件中读取数据并应用:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_month);
monthlist = load();
//initDay();
MonthAdapter adapter = new MonthAdapter(MonthActivity.this,R.layout.month_item,monthlist);
ListView listView = (ListView)findViewById(R.id.list_view_);
listView.setAdapter(adapter);
}
另:除了文件系列的异常,空指针异常也遇到不少了,多半是id设置重复,应用的id不正确,应该添加的属性,控件名等等写错,总而言之,我们每次实现一个功能都应该运行程序,这样就可以确定范围,我们就在确定的范围内搜索排除错误(控制变量法),总的来说空指针异常是可以通过仔细看代码(肉眼观察)发现并解决的。还是编码的很多习惯不好(比如命名),都说code习惯风格好的人运气都不会太差,我改。。。