目录
Activity的加载模式
1.标准模式(standard)
android:launchMode=”standard”
这种模式是默认的,每次跳转一个Acitivity就生成一个Activity的实例。
2.栈顶复用模式(singleTop)
android:launchMode=”singleTop”
当下一个要跳转的页面刚好是当前前台显示的页面时,此模式会复用该实例,而不会生成一个新的实例。其他情况下等同标准模式。
重用:没有新的实例生成,重用时onPause –> onResume,实际上就是页面失去屏幕焦点后迅速获得屏幕焦点,从来没有退到后台。
3.栈内复用模式(singleTask):很强大,谨慎使用
android:launchMode=”singleTask”
重用(分两种情况):第一种情况是,要跳转的页面恰好之前启动过,且在后台,会发生重用,且在其栈上面的其他Activity都会被销毁。重用时onStart–>onResume,即直接从前台切换到后台。
第二种情况同栈顶复用。
4.单例模式(singleInstance)
独自在一个栈,且永远都只有一个实例。
在退出的时候,程序都是先清空一个栈后再切换到另外一个栈。
ListView 滑动列表 (MVP模式)
1.ArrayAdapter
最简单的一种适配器,只支持每个Item单个文字控件的显示。
item的布局文件中TextView的id必须是 android:id=”@+id/text1”
public class MainActivity extends Activity {
// private static final Log;
private static final String TAG = "MainActivity";
//M:数据源
private ArrayList<String> mDataList;
//P:适配器
private ArrayAdapter<String> mAdapter;
//V:视图
private ListView mListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
initAdapter();//先做适配器,再做列表
initListVew();
}
public void initData() {
mDataList = new ArrayList<String>();
mDataList.add("hello");
mDataList.add("不干哈");
}
public void initListVew() {
mListView = (ListView) findViewById(R.id.list_view);
//给视图设置适配器
mListView.setAdapter(mAdapter);
//对每一个Item做监听
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
//第一个参数:被点击的Item
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.d("parent", "parent");
//在这里举例如何删除数据后,重新更新UI,增加数据同理
//通络位置直接找数据源来进行直接操作,比如remove为删除指定位置按钮数据
// mDataList.remove(position);
mDataList.add(position, "您点击了这个地方");
//是哟红适配器来更新UI通知来惊醒数据刷新
mAdapter.notifyDataSetChanged();
}
});
}
private void initAdapter() {
//第一个参数:上下文
//第二个参数:单个Item的布局
//第三个参数,加载显示内容
mAdapter = new ArrayAdapter<>(this, R.layout.item_layout, mDataList);
}
}
2.SimpleAdapter
可以做出任何显示效果,网络图片加载受限,无法对Item内部的单独控件进行控制。
数据源使用复杂。
public class Onepicture extends Activity {
private static final String TAG = "MainActivity";
//M:数据源
private ArrayList<String> mTextList;
private ArrayList<Integer> mImagList;
//数据源
private ArrayList<HashMap<String, Object>> mDataList;
//P:适配器
private SimpleAdapter mAdapter;
//V:视图
private ListView mListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
initSimpleAdapter();
initListVew();
}
private void initData() {
mTextList = new ArrayList<String>();
mImagList = new ArrayList<Integer>();
mTextList.add("奥迪");
mTextList.add("雪佛兰");
mImagList.add(R.drawable.audi);
mImagList.add(R.drawable.chevrolet);
//map循环装载
mDataList = new ArrayList<HashMap<String, Object>>();
for (int i = 0; i < mTextList.size(); i++) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("img", mImagList.get(i));
map.put("text", mTextList.get(i));
mDataList.add(map);
}
}
public void initListVew() {
mListView = (ListView) findViewById(R.id.list_view);
//给视图设置适配器
mListView.setAdapter(mAdapter);
}
public void initSimpleAdapter() {
String[] from = new String[]{"img", "text"};
int[] to = new int[]{R.id.item_image, R.id.item_text};
mAdapter = new SimpleAdapter(this, mDataList, R.layout.onepicture_layout, from, to);
}
}
附加:注意事项
项目内置的贴图(drawable文件夹下)有严格的命名规范:
1.不能包含特殊符号¥……%¥%……¥
2.不能使用大写英文
3.不可以用数字开头
4.通常使用英文和下划线分割
5.不得包含空格
tips
1、HashMap存放键值对
List<HashMap<String,?>> data;
2、图片长距离传输,可以从网络下载到本地,然后数据流加载:
url ->输入流-> 文件输入流->文件->文件输入->Bitmap->显示ListView