ListView 中使用 BaseAdapter 

然後 ListItem 放入 ImageView + TextView + Button 的練習

預計做完會長這樣 (誰叫我是DQ 迷)

 Clipboard02

 

首先這個例子的作法是將原本繼承的 Activity 改為繼承 ListActivity

這樣的話就不需要在畫面上再拉一個 ListView 了

然後再來是設計一下 ListView 裡面 item 的長相

所以新建了一個 XML 叫做 test.xml

如下 :

 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="6dp"
android:src="@drawable/arrow" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginLeft="5dp"
android:layout_toRightOf="@+id/imageView1"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Small Text"
android:textAppearance="?android:attr/textAppearanceSmall" />
</LinearLayout>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:focusable="false"
android:text="基本資料" />
</RelativeLayout>

 

切到 Layout 畫面長這樣 

Clipboard02

然後再來是程式碼

做法是自己做一個 MyAdapter 繼承 BaseAdapter 然後就可以針對內容 or 行為去客制了

繼承 BaseAdapter 後再覆寫 getCount()、getItem()、getItemId()、getView()

 

package com.myfirst.myapp;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

//這邊把原本繼承的 Activity 改為 ListActivity

//然後 implements ListView.OnItemClickListener,方便等下捕捉 ListView item 的 click 

public class Basic extends ListActivity implements ListView.OnItemClickListener {

          List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

         // 標題是DQ裡面史萊姆系的怪物名稱
         private final String[] titleArr = new String[] {
                  "スライム",
                  "バブルスライム",
                  "ホイミスライム",
                  "スライムナイト",
                  "キングスライム",
                  "ドラゴスライム",
                  "ぶちスライム",
                  "スライムつむり",
                  "ボックススライム",
                  "スラッピー",
                  "ストーンスライム",
                  "メタルキング",
                  "はぐれメタル",
         };

         //副標題是怪物編號
         private final String[] subTitleArr = new String[] {
                  "001",
                  "002",
                  "003",
                  "004",
                  "005",
                  "006",
                  "007",
                  "008",
                  "009",
                  "010",
                  "011",
                  "012",
                  "013"
         }; 

         //再來是網路找的怪物圖片
         private final int[] imgArr = new int[] {
                  R.drawable.a001,
                  R.drawable.a002,
                  R.drawable.a003,
                  R.drawable.a004,
                  R.drawable.a005,
                  R.drawable.a006,
                  R.drawable.a007,
                  R.drawable.a008,
                  R.drawable.a009,
                  R.drawable.a010,
                  R.drawable.a011,
                  R.drawable.a012,
                  R.drawable.a013,
         };

         @Override
         public void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  list = getData();
                  MyAdapter adapter = new MyAdapter(this);
                  setListAdapter(adapter);
         }

         //將需要的資料塞到 List 裡面

         private List<Map<String,Object>> getData() {
                  List<Map<String, Object>> list2 = new ArrayList<Map<String, Object>>();
                  for(int i=0;i<titleArr.length;i++) {
                           HashMap<String,Object> item = new HashMap<String,Object>();
                           item.put("title", titleArr[i]);
                           item.put("subtitle", subTitleArr[i]);
                           item.put("mpic", imgArr[i]);
                           list2.add(item);
                  }
                  return list2;
         }

        // ListView 的 item click
         @Override
         public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                  // TODO Auto-generated method stub
                  Toast.makeText(Basic.this,"編號" + subTitleArr[arg2], Toast.LENGTH_SHORT).show();
         }

         public final class MyView {
                  public TextView title;
                  public TextView subtitle;
                  public Button bt;
                  public ImageView img;
         }

         // 實作一個 Adapter 繼承 BaseAdapter
         public class MyAdapter extends BaseAdapter {
                  private LayoutInflater inflater;
                  public MyAdapter(Context context) {
                           inflater = LayoutInflater.from(context);
                  }

                  @Override
                  public int getCount() {
                           // TODO Auto-generated method stub

                           //回傳這個 List 有幾個 item

                           return list.size();

                  }

                  @Override
                  public Object getItem(int position) {
                           // TODO Auto-generated method stub
                           return null;
                  }

                  @Override
                  public long getItemId(int position) {
                           // TODO Auto-generated method stub
                           return 0;
                  }

                  @Override
                  public View getView(final int position, View convertView, ViewGroup parent) {
                           // TODO Auto-generated method stub
                           MyView myviews = null;
                           myviews = new MyView();
                           convertView = inflater.inflate(R.layout.test, null);
                           myviews.title = (TextView) convertView.findViewById(R.id.textView1);
                           myviews.subtitle = (TextView) convertView.findViewById(R.id.textView2);
                           myviews.bt = (Button) convertView.findViewById(R.id.button1);
                           myviews.img = (ImageView) convertView.findViewById(R.id.imageView1);

                           myviews.title.setText((String) list.get(position).get("title"));
                           myviews.subtitle.setText((String) list.get(position).get("subtitle"));
                           myviews.img.setImageResource(imgArr[position]);
                          
                           myviews.bt.setOnClickListener(new View.OnClickListener() {
                                    @Override
                                    public void onClick(View v) {
                                             Toast.makeText(Basic.this, titleArr[position], Toast.LENGTH_SHORT).show();
                                    }
                           });
                           return convertView;
                  }
         }
}

 

然後點"基本資料" 就會出現"怪物名稱" (基本資料不知去哪生 = = )

 

 Clipboard02

 然後點"怪物名稱"會出現"怪物編號"

 Clipboard02  

 

arrow
arrow
    全站熱搜

    小雕 發表在 痞客邦 留言(3) 人氣()