安卓學習筆記 Activity的加載模式 & ListView 滑動列表(UI內容)

目錄

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章