show code block

2016年6月21日 星期二

Android元件─ Adapter─SimpleAdapter使用-動態預覽

Adapter─SimpleAdapter使用─動態預覽
前言

首先我要感謝一下師父:駱有騰 大師!

這是我之前在做Fragment Spinner 相關連結的時候的產物。
下面Layout把她設計成Fragment,上面的Spinner可以選擇下面的Fragment切換。

然後我發現一個很嚴重的Bug,當妳的Fragment設計得太過腫大的時候,再做切換的時候會導致崩潰。

事後我把程式碼中會把Fragment存到佔存區的指令拿掉,發現問題沒有改善。

初步的想法認為應該和生命週期無關!認為應該是頻繁的創造和銷毀fragment導致崩潰。

因此我捨去Fragment的作法,下面的畫面使用simpleadapter,讓使用上更為流暢!




先來概述一下adapter。




adpater就是一個轉接器。

一句概括adapter:
獲取轉接器的介面直接從adapter拿取想要的東西。
獲取轉接器的介面完全不想知道adatper是如何取得這些東西的,這就是adapter!


今日實作影片:






因此我使用其他方式來呈現這個做法。

正文

1、實現

Layout佈局












MainActivity
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context="com.example.app_simpleadapter.MainActivity">
    <TextView
        android:id="@+id/m_tv_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.35"
        android:text="TextView" />

    <ListView
        android:background="@android:color/holo_blue_light"
        
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.87" >
    </ListView>

</LinearLayout>










額外再創造一個xml
item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:weightSum="1">


    <TextView
        android:id="@+id/textView11"
        android:layout_width="50dp"
        android:layout_height="150dp"
        android:layout_weight="0.3"
        android:textSize="30dp"
        android:text="New Text" />

    <TextView
        android:textSize="30dp"
        android:id="@+id/textView22"
        android:layout_width="50dp"
        android:layout_height="150dp"
        android:layout_weight="0.3"
        android:text="New Text" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="50dp"
        android:layout_height="150dp"
        android:layout_weight="0.3" />
</LinearLayout>











JAVA佈局
MainActivity
package com.example.app_simpleadapter;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity {
    private MainActivity context;
    private TextView textView1;
    private TextView textView2;
    private ListView listView;
    private SimpleAdapter adapter;

   //設定List陣列
    private List<Map<String,Object>> list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findID();
        start();
    }


    public void findID() {
        context = this;
        listView = (ListView) findViewById(R.id.listView1);
        textView1=(TextView)findViewById(R.id.textView11);
        textView2=(TextView)findViewById(R.id.textView22);

    }


    public void start() {

        //步驟一 先創建MAP
        Map<String, Object> map1 = new HashMap<>();
        map1.put("name","大麥克");
        map1.put("price",80);
        map1.put("imageID",R.drawable.big_mac);

        Map<String, Object> map2 = new HashMap<>();
        map2.put("name","大薯條");
        map2.put("price",50);
        map2.put("imageID",R.drawable.french_fries_big);

        Map<String, Object> map3 = new HashMap<>();
        map3.put("name","可樂");
        map3.put("price",35);
        map3.put("imageID",R.drawable.coca_cola);

        Map<String, Object> map4 = new HashMap<>();
        map4.put("name","咖啡");
        map4.put("price",35);
        map4.put("imageID",R.drawable.iced_coffee);

        Map<String, Object> map5 = new HashMap<>();
        map5.put("name","雙層牛肉堡");
        map5.put("price",35);
        map5.put("imageID",R.drawable.pounder_cheese);

        Map<String, Object> map6 = new HashMap<>();
        map6.put("name","麥香魚");
        map6.put("price",35);
        map6.put("imageID",R.drawable.fish);

        Map<String, Object> map7 = new HashMap<>();
        map7.put("name","蘋果派");
        map7.put("price",35);
        map7.put("imageID",R.drawable.apple_pie);

        //步驟二,list 放入Map
        list = new ArrayList<>();
        list.add(map1);
        list.add(map2);
        list.add(map3);
        list.add(map4);
        list.add(map5);
        list.add(map6);
        list.add(map7);


        //步驟三 創建一個adapter
        adapter = new SimpleAdapter(
                context,list,R.layout.item
                ,new String[]{"name","price","imageID"}
                ,new int[]{R.id.textView11,R.id.textView22,R.id.imageView}
                );


        //ListView 設定進去
        listView.setAdapter(adapter);

    }
}

內文補充─
drawble內的圖片麻煩請自行下載,這邊就不提供了。
或是值接下載下方的github連結,都在裡面!


完成啦!

提供範例打包下載 github連結:

1 則留言:

  1. 這篇因為JDK版本更動,造成一些錯誤,有人有興趣看哪裡錯了我再做更動XD

    回覆刪除

協程(coroutine) - 協程為什麼要學它?

 Coroutine 協程 再強調一次 協程就是由kotlin官方所提供的線程api //Thread Thread { }.start() //Executor val execu...