Android版本TO-DO-LIST,練習Fragment的使用

來源:互聯網
上載者:User

標籤:android   style   http   io   os   ar   使用   java   sp   

直接帖代碼,懶得說這些老知識點

首先是主Activity:包括一個標題,一個輸入項用於添加列表想,其實下方就是我們的ListFragment用於展示清單項目,同時可以刪除之

ToDoListActivity:

 package com.example.learn;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.EditText;/** * Created by gongxufan on 2014/10/30. */public class ToDoListActivity extends Activity implements TodoListFragment.ToDoListInterface{    private EditText todo;    @Override    public void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.todolist);        todo = (EditText)findViewById(R.id.addItem);    }    public void addItem(View v){        addToDoListItem(todo.getText().toString());    }    @Override    public void addToDoListItem(String itemName)    {        TodoListFragment ft =  (TodoListFragment)getFragmentManager().findFragmentById(R.id.todoList);        ft.addToDoList(itemName);    }}

對應的布局檔案:R.layout.todolist

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"              android:orientation="vertical"              android:layout_width="match_parent"              android:layout_height="match_parent"              android:gravity="center_horizontal">    <TextView            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:text="To-Do-List"            android:id="@+id/textView"            android:gravity="center"/>    <LinearLayout            xmlns:android="http://schemas.android.com/apk/res/android"            android:orientation="horizontal"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:gravity="center">    <EditText            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_weight="4"            android:layout_gravity="fill_horizontal"            android:id="@+id/addItem"            />        <Button android:layout_width="wrap_content" android:onClick="addItem"                android:layout_height="wrap_content" android:text="添加" android:layout_weight="1"/>       </LinearLayout>    <fragment android:layout_width="match_parent"              android:name="com.example.learn.TodoListFragment"              android:layout_height="wrap_content"              android:id="@+id/todoList"></fragment></LinearLayout>

如上所說的三個組件,期中嵌套了線性布局,fagment也是線性布局嵌套結果

接下來是TodoListFragment代碼,其主要是一個ListFragment,有三部分組成:EditText和兩個Button,由於我們使用自訂ITEM布局所以必須指定一個ID為"@+id/android:list"的布局,

然後在適配器實現ITEM項的具體布局。先貼下2個布局檔案:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"              android:orientation="vertical"              android:layout_width="match_parent"              android:layout_height="match_parent">    <ListView            android:id="@+id/android:list"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            /></LinearLayout>

上面是ListFragment的主布局檔案,在onCreateView進行調用,然後在適配器中把自訂VIEW添加到這個ListView中作為項。

這裡稍微說明下,為什麼ListFragment主布局檔案必須要有一個ID為list的ListView呢,其實這正是ListFragment裡幫我們實現了LISTVIEW的功能。

在適配器View getView(final int position, View convertView, ViewGroup parent)這個方法中的parent其實就是上面布局檔案裡的ListView的執行個體,看調試結果:

<?xml version="1.0" encoding="utf-8"?><LinearLayout        xmlns:android="http://schemas.android.com/apk/res/android"        android:orientation="horizontal"        android:layout_width="match_parent"        android:layout_height="wrap_content">    <EditText            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:id="@+id/todoListContent" android:layout_weight="8"/>    <Button            style="?android:attr/buttonStyleSmall"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="編輯"            android:id="@+id/editItem" android:layout_weight="1"/>    <Button            style="?android:attr/buttonStyleSmall"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="刪除"            android:id="@+id/deleteItem" android:layout_weight="1"/></LinearLayout>

上面是每個項的布局,很簡單

接下來貼上ListFragment的代碼:

package com.example.learn;import android.app.Activity;import android.app.Fragment;import android.app.ListFragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.*;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/** * Created by gongxufan on 2014/10/30. */public class TodoListFragment extends ListFragment{    private ToDoListInterface callback;    private List<String> data = new ArrayList<String>();    private BaseAdapter baseAdapter;    public interface ToDoListInterface{        public void addToDoListItem(String itemName);    }    private class ViewHolder{        EditText todoItem;        Button edit;        Button delete;    }    public ToDoListInterface getCallback()    {        return callback;    }    @Override    public void onAttach(Activity activity)    {        super.onAttach(activity);        callback = (ToDoListInterface)activity;    }    @Override    public void onDetach()    {        super.onDetach();        callback = null;    }    public void addToDoList(String itemName){        data.add(itemName);        baseAdapter.notifyDataSetChanged();    }    @Override    public void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        baseAdapter = new BaseAdapter()        {            @Override            public int getCount()            {                return data.size();            }            @Override            public Object getItem(int position)            {                return data.get(position);            }            @Override            public long getItemId(int position)            {                return position;            }            @Override            public View getView(final int position, View convertView, ViewGroup parent)            {                LayoutInflater mInflater = (LayoutInflater) TodoListFragment.this.getActivity()                    .getSystemService(TodoListFragment.this.getActivity().LAYOUT_INFLATER_SERVICE);                ViewHolder viewHolder = null;                if(convertView == null){                    viewHolder = new ViewHolder();                    convertView = mInflater.inflate(R.layout.ltodolist_item,parent,false);                    viewHolder.todoItem = (EditText)convertView.findViewById(R.id.todoListContent);                    viewHolder.edit = (Button)convertView.findViewById(R.id.editItem);                    viewHolder.delete = (Button)convertView.findViewById(R.id.deleteItem);                    convertView.setTag(viewHolder);                }else{                    viewHolder = (ViewHolder)convertView.getTag();                }                viewHolder.todoItem.setText((String)getItem(position));                viewHolder.delete.setOnClickListener(new View.OnClickListener()                {                    @Override                    public void onClick(View v)                    {                        data.remove(getItem(position));                        baseAdapter.notifyDataSetChanged();                    }                });                return convertView;            }        };        setListAdapter(baseAdapter);    }    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)    {        return inflater.inflate(R.layout.todolist_fragment, container, false);    }    @Override    public void onListItemClick(ListView l, View v, int position, long id)    {        super.onListItemClick(l, v, position, id);    }}

代碼也很簡單,只是一個BaseAdapter進行自訂布局,然後就是響應刪除,添加的事件處理,改變適配器資料重新進行UI布局

 

好了一個簡單粗狂的TO-DO-LIST就完成了,只是為了練習下Fragment使用,本人新手,忘見諒。

模擬器運行結果:

Android版本TO-DO-LIST,練習Fragment的使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.