標籤: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的使用