MainActivity:
package com.home.testdialogborder; import android.app.Activity; import android.app.Dialog; import android.os.Bundle; import android.view.View; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public void click(View v) { if (v.getId() == R.id.main_btn_set) { Dialog dialog = new Dialog(MainActivity.this, R.style.NoBorderDialog); dialog.setContentView(R.layout.dialog); dialog.show(); } } }
style.NoBorderDialog:
<style name="NoBorderDialog" parent="@android:style/Theme.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowIsFloating">true</item> <item name="android:windowIsTranslucent">false</item> <item name="android:windowNoTitle">true</item> <item name="android:background">@android:color/black</item> <item name="android:windowBackground">@null</item> <item name="android:backgroundDimEnabled">false</item> </style>
布局文件内容自定义即可
接着Fragment的简单使用一文继续探讨Fragment的使用,本文主要介绍使用Fragment实现动态UI布局,包括动态添加、替换、移除某个Fragment,至于Fragment之间的交互,后面在讨论。
MainActivity:
package com.home.testfragment; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentTransaction; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends FragmentActivity implements OnClickListener { private Button addFirstFragmentBtn; private Button replaceFirstFragmentBtn; private Button removeFirstFragmentBtn; private FirstFragment firstFragment; @Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); setContentView(R.layout.main); addFirstFragmentBtn = (Button) findViewById(R.id.main_btn_add); replaceFirstFragmentBtn = (Button) findViewById(R.id.main_btn_replace); removeFirstFragmentBtn = (Button) findViewById(R.id.main_btn_remove); addFirstFragmentBtn.setOnClickListener(this); replaceFirstFragmentBtn.setOnClickListener(this); removeFirstFragmentBtn.setOnClickListener(this); addFirstFragmentBtn.setEnabled(true); removeFirstFragmentBtn.setEnabled(false); } @Override public void onClick(View v) { if (v == addFirstFragmentBtn) { addFirstFragmentBtn.setEnabled(false); removeFirstFragmentBtn.setEnabled(true); if (findViewById(R.id.main_container) != null) { firstFragment = new FirstFragment(); FragmentTransaction transaction = getSupportFragmentManager() .beginTransaction(); transaction.add(R.id.main_container, firstFragment); // 把当前Fragment添加至回退栈,通过返回键返回时可以导航到上一个Fragment状态 transaction.addToBackStack(null); // 提交 transaction.commit(); } } if (v == replaceFirstFragmentBtn) { addFirstFragmentBtn.setEnabled(true); removeFirstFragmentBtn.setEnabled(false); SecondFragment secondFragment = new SecondFragment(); FragmentTransaction transaction = getSupportFragmentManager() .beginTransaction(); transaction.replace(R.id.main_container, secondFragment); transaction.addToBackStack(null); transaction.commit(); } if (v == removeFirstFragmentBtn) { addFirstFragmentBtn.setEnabled(true); removeFirstFragmentBtn.setEnabled(false); FragmentTransaction transaction = getSupportFragmentManager() .beginTransaction(); transaction.remove(firstFragment); // 如果移除的时候也添加到回退栈,表示当前Fragment只是被停止而没有被摧毁,返回时它将恢复; // 那么如果不添加到回退栈则表示完全摧毁 // transaction.addToBackStack(null); transaction.commit(); } } }
FirstFragment:
package com.home.testfragment; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class FirstFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_first, container, false); } }
SecondFragment:
package com.home.testfragment; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class SecondFragment extends Fragment{ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_second, container, false); } }
main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <FrameLayout android:id="@+id/main_container" android:layout_width="match_parent" android:layout_height="wrap_content" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:orientation="horizontal" > <Button android:id="@+id/main_btn_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="添加" /> <Button android:id="@+id/main_btn_replace" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="替换" /> <Button android:id="@+id/main_btn_remove" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="移除" /> </LinearLayout> </RelativeLayout>
fragment_first.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="MyFirstFragment" android:textSize="20sp" /> </LinearLayout>
fragment_second.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="MySecondFragment" android:textSize="20sp" /> </LinearLayout>
1. 算法的几个特征是什么。
2. 算法复杂性的定义。大O、θ、Ω、小o分别表示的含义。
3. 递归算法的定义、递归算法的两要素。
4. 分治算法的思想,经典的分治算法(全排列、二分搜索、归并排序、快速排序、线性时间选择、最接近点对问题)。
5. 动态规划算法解题框架,动态规划算法的两个要素是什么?备忘录方法是什么?
6. 经典的动态规划问题(矩阵连乘问题、最长公共子序列问题、0-1背包问题)。
7. 贪心算法的思想,贪心算法的两个要素。
8. 经典的贪心问题(活动安排问题、背包问题、装载问题、哈夫曼编码、单源最短路径、最小生成树问题)。
9. 回溯法的思想,回溯法中有哪两种典型的模型。
10. 经典的回溯算法(n后问题、0-1背包问题、旅行售货商问题)。
11. 分支限界法思想,有哪两种分支限界法。
12. 经典的分支限界算法(0-1背包问题、旅行售货商问题)。
1. 数据结构的定义。
2. 栈的两个应用:括号匹配和表达式的计算。是怎么应用的?表达式计算用的是哪种表达方式?有什么好处?
3. 字符串匹配算法:朴素的匹配算法、KMP算法。
4. 二叉树前序、中序、后序递归遍历算法。二叉树前序非递归遍历算法。
5. 堆,建堆算法,堆的插入和删除算法,堆排序。
6. 哈希。哈希函数的有哪些种?余数的取法? 处理冲突的方法? 闭散列方法有哪些?
7. 二叉搜索树的搜索、插入、删除。时间复杂度。
8. 二叉平衡树的插入结点的原理,有哪几种旋转方式?分别适用于哪种情况。分析二叉平衡树的时间复杂度。
9. 红黑树的定义,红黑树的性能分析和与二叉平衡树的比较。
10. 图有哪些储存表示。
11. 链表插入排序、链表归并排序。
12. 常见的有哪几种排序算法,试比较其时间复杂度,以及是否稳定,及各自使用的情形。
13. 常用分配排序有哪几种? 基数排序的定义,分类及原理。
14. B树、B+树、Trie的概念及用途,添加删除结点的原理。