代码改变世界

Head Fisrt Android Development读书笔记(6)Lists and Adapters

2012-10-16 15:39  java20130722  阅读(106)  评论(0编辑  收藏  举报

ListView = ScrollView[ ViewGroup[A View for Each Row] ]


Adapter 

 an interface whose implementations provide data and the display of that data used by the ListView.


public class TimeTrackerAdapter extends BaseAdapter {

...

}


View getView(int index, View view, ViewGroup parent) 

return the view used to display data in the ListView


define time_list_item.xml in /res/layout/

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:orientation="vertical">
    <TextView android:id="@+id/time_view"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:textSize="18dp"
              android:paddingBottom="5dp"
            />
    <TextView android:id="@+id/note_view"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:textSize="12dp"
            />
</LinearLayout>




Steps to complete getView

1.Instantiate the View

null input view--> initialize

not null --> repopulating

2.Retrieve the data

3.Set values on the view

R.layout.time_list_item

    public View getView(int i, View view, ViewGroup viewGroup) {
        if (view == null) {
            LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
            view = inflater.inflate(R.layout.time_list_item, viewGroup, false);
        }


        TimeRecord timeRecord = records.get(i);
        TextView timeTextView = (TextView) view.findViewById(R.id.time_view);
        timeTextView.setText(timeRecord.getTime());
        TextView noteTextView = (TextView) view.findViewById(R.id.note_view);
        noteTextView.setText(timeRecord.getNote());


        return view;
    }


connect listview with adapter

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ListView listView = (ListView) findViewById(R.id.times_list);
        TimeTrackerAdapter timeTrackerAdapter = new TimeTrackerAdapter();
        listView.setAdapter(timeTrackerAdapter);
    }