国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Intnet Bundle以及ListView的學習

2019-11-07 23:01:15
字體:
來源:轉載
供稿:網友

這次做的是一個簡單的通訊錄,有兩個頁面,第一個頁面呈現聯系人,第二個頁面是顯示聯系人的詳細信息。

先上兩張效果圖:

  

可以進行的操作大家可以下載來試一下,功能不是很多,但是對于入門Android的童鞋來說還是比較有意思的。

下面講一下技術要點:

對于ListView來說,他的布局是很簡單的:

    <ListView        android:id="@+id/lv"        android:layout_width="match_parent"        android:layout_height="match_parent"/> 要注意的是這個id是一定要是設的,因為后面需要在.java文件中填充數據。

在.java文件中獲得這個ListView之后,使用Adapter為這個ListView填充數據,常用的Adapter有ArrayAdapter,SimpleAdapter,隨著ListView中內容的豐富,以上兩種Adapter已經很難滿足需要,因此現在一般使用自定義的Adapter來填充數據。

在這個應用中,我是用了自定義的Adapter以及SimpleAdapter。

對于SimpleAdapter,,創建SimpleAdapter需要5個參數,第一個參數依然是Context,就不多說了,下面介紹余下的4個參數:第2個參數:該參數應該是一個List<? Extends Map<String, ?>>類型的集合對象,該集合中每個Map<String, ?>對象生成一個列表項。第3個參數:該參數指定一個界面布局的ID。該界面布局指定每一個列表項的樣式。第4個參數:該參數應該是一個String[]類型的參數,該參數決定提取Map<String, ?>對象中哪些key對應的value來生成列表項。第5個參數:該參數應該是一個int[]類型的參數,該參數決定填充哪些組件。

    public void More_PRocess() {        String[] op = {"編輯聯系人", "分享聯系人", "加入黑名單", "刪除聯系人"};        // 使用SimpleAdapter填充數據        List<Map<String, Object>> mapList = new ArrayList<>();        for (int i = 0; i < op.length; i++) {            Map<String, Object> temp = new LinkedHashMap<>();            temp.put("op", op[i]);            mapList.add(temp);        }        SimpleAdapter simpleAdapter = new SimpleAdapter(this, mapList, R.layout.more,                new String[]{"op"}, new int[]{R.id.more_to_do});        item_list.setAdapter(simpleAdapter);    }

這一個Adapter我用來填充聯系人詳情頁面中的下面的一些東西。

對于listView的長按和點擊事件的處理這里就不多說了,這里實現的功能是點擊之后跳轉到聯系人詳情頁面,長按會彈出對話框提示是否刪除這個聯系人。

需要注意的是長按的事件處理是有返回值的,默認是false,但是這樣的話是不能區分長按和點擊的,在我測試的過程中體現出來就是長按之后會彈出對話框,但是也實現了單擊的跳轉功能,改成true之后就正常了。

下面主要介紹一下自定義的Adapter,直接上代碼:

public class MyAdapter extends BaseAdapter {    private Context context;    private List<Information> list;    public MyAdapter(Context context, List<Information> list) {        this.context = context;        this.list = list;    }    @Override    // 獲取數據項列表的長度,也就是一共有多少個數據項    public int getCount() {        if (list == null) return 0;        else return list.size();    }    @Override    // 獲得某一個數據項    public Object getItem(int i) {        if (list == null) return null;        else return list.get(i);    }    @Override    // 獲得數據項的布局樣式,    public long getItemId(int i) {        return i;    }    @Override    public View getView(int i, View view, ViewGroup viewGroup) {        // 新聲明一個View變量和ViewHolder變量        View convertView;        ViewHolder viewHolder;        // 當View為空時才加載布局,并且創建一個ViewHolder,獲得布局中的兩個控件        if (view == null) {            // 通過inflate方法加載布局,context這個參數需要使用這個adapter的Activity傳入            convertView = LayoutInflater.from(context).inflate(R.layout.item, null);            viewHolder = new ViewHolder();            viewHolder.first_name = (TextView) convertView.findViewById(R.id.first_name);            viewHolder.name = (TextView) convertView.findViewById(R.id.name);            // setTag方法是將處理好的viewHolder放入view中            convertView.setTag(viewHolder);        } else { // 否則,讓convertView等于view, 然后從中取出ViewHolder即可            convertView = view;            viewHolder = (ViewHolder) convertView.getTag();        }        // 從ViewHolder中取出對象,然后負責給他們        viewHolder.first_name.setText(list.get(i).getFirst_name());        viewHolder.name.setText(list.get(i).getName());        return convertView;    }    private class ViewHolder {        public TextView first_name;        public TextView name;    }}

自定義的Adapter需要提供一個數據列表才能填充數據,一般是一個List類型,在這里我是創建了一個information類,然后將List<Information>傳入Adapter中作為數據的列表。

注意這個Information類,因為點擊聯系人頁面之后,跳轉的聯系人詳情頁面中不出bug的話是要顯示詳情的,這些詳情哪里來呢,當然是從main_activity中傳過去啦!所以為了在兩個activity之間傳遞信息,使用bundle來實現。這個Information類就需要實現serializable.

傳遞和接收是這樣的:

                Intent intent = new Intent(MainActivity.this, Particulars.class);                Bundle bundle = new Bundle();                bundle.putSerializable("information", list.get(i));                intent.putExtras(bundle);                startActivity(intent);
Information information = (Information) this.getIntent().getSerializableExtra("information");有興趣的童鞋可以下載源碼來玩一下:

       點擊下載源碼


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 北辰区| 邵武市| 突泉县| 夏津县| 开封县| 芦山县| 池州市| 莱西市| 阳山县| 临潭县| 宁河县| 长治县| 吉木萨尔县| 甘孜| 虎林市| 原平市| 新乐市| 乐山市| 河间市| 塔城市| 刚察县| 和田市| 安义县| 类乌齐县| 静安区| 丰顺县| 龙岩市| 吉首市| 兴义市| 广安市| 栾川县| 宜城市| 延长县| 梅州市| 易门县| 邓州市| 离岛区| 霸州市| 青铜峡市| 广饶县| 沁阳市|