安卓学习笔记 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

猜你喜欢

转载自blog.csdn.net/lewyu521/article/details/80846289