activity中的代码基本都转移到Fragment里了 这样真的好么
1. 首先创建模型类,根据需要添加数据集中存储池来存储模型对象
(如使用支持存放指定数据类型对象的Java有序数组类,ArrayList
public class DemosLab {
//有序组成员变量
private ArrayList mDemos;//静态对象
private static DemosLab sDemosLab;
private Context mAppContext;
private DemosLab(Context appContext){
mAppContext = appContext;
mDemos = new ArrayList();
Demo demo = new Demo();
demo.setName("Service");
demo.setDate("2015/9/9");
demo.setDescription("学习Service");
demo.setFinished(false);
mDemos.add(demo);
}
public ArrayList getDemos(){
return mDemos;
}
public Demo getDemo(String name){
for(Demo demo : mDemos){
if(demo.getName().equals(name))
return demo;
}
return null;
}
public static DemosLab get(Context c){
if(sDemosLab == null){
sDemosLab = new DemosLab(c.getApplicationContext());
}
return sDemosLab;
}
}
2.继承抽象自定义Activity
public abstract class SingleFragmentActivity extends FragmentActivity
//抽象方法 提供Fragment实例
protected abstract android.app.Fragment createFragment();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
//抽象方法 也就是模板,具体实现具体对待
.add(R.id.container,createFragment())
.commit();
}
}
}
public class DemosListFragment extends ListFragment {
private static final int REQUESR_DEMOSLIST = 1;
private ArrayList mDemos;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActivity().setTitle(R.string.app_name);
//此项根据需要设置是否保留Fragment
setRetainInstance(true);
//设置此项才可以在fragment中正确使用选项菜单
setHasOptionsMenu(true);
//使用DemosLab的静态方法获取其实例进而获得demos数组
mDemos = DemosLab.get(getActivity()).getDemos();
//使用自定义Adapter填充数据
DemoAdapter adapter = new DemoAdapter(mDemos);
setListAdapter(adapter);
}
//状态保存
@Override
public void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
//选项菜单
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// TODO Auto-generated method stub
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.main, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == android.R.id.home){
Toast.makeText(getActivity(), "返回"+item.getItemId(),Toast.LENGTH_SHORT).show();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
NavUtils.navigateUpFromSameTask(getActivity());
}
Toast.makeText(getActivity(), ""+item.getItemId(),Toast.LENGTH_SHORT).show();
// 返回true表明已完成处理
return true;
}
//覆盖Fragment.onActivityForResult方法从被启动activiy获取结果
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == REQUESR_DEMOSLIST){
Toast.makeText(getActivity(), "got result:"+resultCode, Toast.LENGTH_SHORT).show();
}
}
//刷新列表项
@Override
public void onResume() {
// TODO Auto-generated method stub
super.onResume();
((DemoAdapter)getListAdapter()).notifyDataSetChanged();
}
//Toast便捷方法
protected void toast(Context context,String text) {
Toast.makeText(context, text, Toast.LENGTH_SHORT).show();
}
//警告对话框便捷方法
protected void alert(String content) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()).setTitle("提示").setMessage(content);
builder.setPositiveButton("确定",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mtoast(getActivity(), ""+which);
}
);
builder.create().show();
}
private class DemoAdapter extends ArrayAdapter{
public DemoAdapter(ArrayList demos) {
super(getActivity(),0,demos);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//列表优化,convertView是刚刚被销毁的视图
if(convertView == null){
convertView = getActivity().getLayoutInflater()
.inflate(R.layout.list_item_demo, null);
}
Demo demo = getItem(position);
TextView tv1 = (TextView) convertView.findViewById(R.id.textView1);
TextView tv2 = (TextView) convertView.findViewById(R.id.textView2);
CheckBox finishedBox = (CheckBox) convertView.findViewById(R.id.checkBox1);;
tv1.setText(demo.getName()+"\n"+demo.getDescription());
tv2.setText(demo.getDate());
finishedBox.setChecked(demo.isFinished());
return convertView;
}
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// TODO Auto-generated method stub
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.main, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == android.R.id.home){
Toast.makeText(getActivity(), "返回"+item.getItemId(),Toast.LENGTH_SHORT).show();
NavUtils.navigateUpFromSameTask(getActivity());
}
Toast.makeText(getActivity(), ""+item.getItemId(),Toast.LENGTH_SHORT).show();
// 返回true表明已完成处理
return true;
}
2)层级式导航(Ancestral navigation)
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
if(NavUtils.getParentActivityName(getActivity())!=null){
getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == android.R.id.home){
if(NavUtils.getParentActivityName(getActivity())!=null){
NavUtils.navigateUpFromSameTask(getActivity());}// 返回true表明已完成处理return true;}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
getActivity().getMenuInflater().inflate(R.menu.demo_list_item_context, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
int position = info.position;
DemoAdapter adapter = (DemoAdapter) getListAdapter();
Demo demo = adapter.getItem(position);
switch (item.getItemId()) {
case R.id.delete:
break;
case R.id.cancle:
break;
default:
break;
}
return true;
}
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {}
public void onDestroyActionMode(ActionMode mode) {}
public boolean onCreateActionMode(ActionMode arg0, Menu arg1) {}
public boolean onActionItemClicked(ActionMode arg0, MenuItem arg1) {}
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB)
registerForContextMenu(listView); //这是注册浮动上下文菜单(无需手动绑定监听器)
else {
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); //这是注册多选上下文操作模式
listView.setMultiChoiceModeListener(new MultiChoiceModeListener(){实现上面的五个方法}
主要是这两个方法:
@Override
public boolean onCreateActionMode(ActionMode arg0, Menu arg1) {
MenuInflater inflater = arg0.getMenuInflater();
inflater.inflate(R.menu.demo_list_item_context, arg1);
return true;
}
@Override
public boolean onActionItemClicked(ActionMode arg0, MenuItem arg1) {
switch (arg1.getItemId()) {
case R.id.delete:
new AlertDialog.Builder(getActivity()).setMessage("deleted!").setPositiveButton("确定", null).create().show();
break;
case R.id.cancle:
new AlertDialog.Builder(getActivity()).setMessage("cancled!").setPositiveButton("确定", null).create().show();
break;
default:
break;
}
return true;
}
改变已激活视图的显示背景:
android:background="@drawable/bgc_act"
TextView tv = (TextView) view.findViewById(R.id.text1);
tv.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
getActivity().startActionMode(new ActionMode.Callback() {
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
// TODO Auto-generated method stub
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.demo_list_item_context, menu);
return true;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
Toast.makeText(getActivity(), "ok", Toast.LENGTH_SHORT).show();
return true;
}
});
return false;
}
});