Adapter─SimpleAdapter使用─動態預覽
前言
首先我要感謝一下師父:駱有騰 大師!
這是我之前在做Fragment
和
Spinner 相關連結的時候的產物。
下面Layout把她設計成Fragment,上面的Spinner可以選擇下面的Fragment切換。
然後我發現一個很嚴重的Bug,當妳的Fragment設計得太過腫大的時候,再做切換的時候會導致崩潰。
事後我把程式碼中會把Fragment存到佔存區的指令拿掉,發現問題沒有改善。
初步的想法認為應該和生命週期無關!認為應該是頻繁的創造和銷毀fragment導致崩潰。
因此我捨去Fragment的作法,下面的畫面使用simpleadapter,讓使用上更為流暢!
先來概述一下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: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: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連結:
https://github.com/nikeru8/app_simpleadapter
Adapter-
Simpleadapter動態預覽-http://nikeru8.blogspot.tw/2016/06/simpleadapter.html
adapter-Spinner下拉式選單的應用- http://nikeru8.blogspot.tw/2016/06/spinner.html
這篇因為JDK版本更動,造成一些錯誤,有人有興趣看哪裡錯了我再做更動XD
回覆刪除