刚开始接触adapter时,理解的不是很透彻,只是死记硬背了关于adapter用法的四个关键点:
ListView.add(new ArrayAdapter<YYY>(this,R.id.XXX,new ArrarList<YYY>))
第一个关键点:
ListView 用来展示数据和子view,可以使ListView也可以是ListFragment
第二个关键点:
ArrayAdapter<YYY>,用来装载数据和显示数据的子view
第三个关键点:
R.id.XXX,用来显示每一条数据的子view
第四个关键点:
new ArrarList<YYY>,用来装载数据
在ToDoListFragment的基础上进行修改:
1.首先增加一个新类,用来装载String和date
ToDoItem.java
package com.godlovesoccer.todolistfragment;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ToDoItem {
String task;
Date created;
public String getTask(){
return task;
}
public Date getCreated(){
return created;
}
public ToDoItem(String _task){
this(_task,new Date(java.lang.System.currentTimeMillis()));
}
public ToDoItem(String _task,Date _created){
task=_task;
created=_created;
}
public String toString(){
SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yy");
String dateString=sdf.format(created);
return "("+dateString+") "+task;
}
}
对原子view的xml做出修改,以便于可以显示date:
todolist_item.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="@+id/rowDate"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:background="@color/notepad_paper"
android:fadingEdge="vertical"
android:padding="10dp"
android:scrollbars="vertical"
android:text="TextView"
android:textColor="#F000" />
<com.godlovesoccer.todolistfragment.ToDoListItemView
android:id="@+id/row"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_toLeftOf="@+id/rowDate"
android:fadingEdge="vertical"
android:padding="10dp"
android:scrollbars="vertical"
android:text="ToDoListItemView"
android:textColor="@color/notepad_text" />
</RelativeLayout>
不再使用ArrayAdapter绑定子view和数据(无法显示date),写一个新类ToDoItemAdapter:
package com.godlovesoccer.todolistfragment;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;
public class ToDoItemAdapter extends ArrayAdapter<ToDoItem>{
int resource;
public ToDoItemAdapter(Context context,int resource,List<ToDoItem> items){
super(context,resource,items);
this.resource=resource;
}
public View getView(int position,View convertView,ViewGroup parent){
LinearLayout todoView;
ToDoItem item=getItem(position);
String taskString=item.getTask();
Date createdDate=item.getCreated();
SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yy");
String dateString=sdf.format(createdDate);
if(convertView==null){
todoView=new LinearLayout(getContext());
String inflater=Context.LAYOUT_INFLATER_SERVICE;
LayoutInflater li;
li=(LayoutInflater)getContext().getSystemService(inflater);
li.inflate(resource, todoView,true);
}else{
todoView=(LinearLayout)convertView;
}
TextView dateView=(TextView)todoView.findViewById(R.id.rowDate);
TextView taskView=(TextView)todoView.findViewById(R.id.row);
dateView.setText(dateString);
taskView.setText(taskString);
return todoView;
}
}
对MainActivity.java进行部分修改:
package com.godlovesoccer.todolistfragment;
import java.util.ArrayList;
import android.app.Activity;
import android.app.FragmentManager;
import android.os.Bundle;
import android.widget.ArrayAdapter;
public class MainActivity extends Activity implements NewItemFragment.OnNewItemAddedListener{
//private ArrayAdapter<String> aa;
//private ArrayList<String> todoItems;
private ArrayList<ToDoItem> todoItems;
//private ArrayAdapter<ToDoItem> aa;
private ToDoItemAdapter aa;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager fm=getFragmentManager();
ToDoListFragment todoListFragment=(ToDoListFragment)fm.findFragmentById(R.id.TodoListFragment);
// todoItems=new ArrayList<String>();
// aa=new ArrayAdapter<String>(this,R.layout.todolist_item,todoItems);
todoItems=new ArrayList<ToDoItem>();
//aa=new ArrayAdapter<ToDoItem>(this,R.layout.todolist_item,todoItems);
aa=new ToDoItemAdapter(this,R.layout.todolist_item,todoItems);
todoListFragment.setListAdapter(aa);
}
@Override
public void onNewItemAdded(String newItem) {
// TODO Auto-generated method stub
// todoItems.add(newItem);
ToDoItem newTodoItem=new ToDoItem(newItem);
todoItems.add(0,newTodoItem);
aa.notifyDataSetChanged();
}
}