目錄
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