iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 24
0
Mobile Development

Android Studio 學習交流系列 第 24

[Day24]Android學習-創新挑戰-健康管理app(2)

  • 分享至 

  • xImage
  •  

本篇重點

  1. GridView載入客製化選項

應具備能力

  1. Android學習-元件介紹-Layout
  2. Android學習-元件介紹-GridView
  3. Android學習-我的清單好朋友與baseAdapter類別

製作專案

此次實作是加入Android學習-我的清單好朋友與baseAdapter類別相關內容,透過繼承baseAdapter類別並且重新覆寫裡面的方法達到客製化設計GridView選單

MainActivity.java

    private String [] text_item={"血壓","血糖","定時","Exit"};
    private int[] img_item={R.drawable.pressure,R.drawable.sugar,R.drawable.baseline_alarm_black_18dp,R.drawable.exit};
  • 建立陣列存放要在首頁載入的圖片以及文字
    public class myGridAdapter extends BaseAdapter{

        private Context context;

        public myGridAdapter(Context context){
            this.context=context;
        }

        @Override
        public int getCount() {
            return text_item.length;
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return img_item[position];
        }

        @Override
        public View getView(int position, View view, ViewGroup viewGroup) {
            View itemview =view;
            if(itemview ==null){
                itemview=getLayoutInflater().inflate(R.layout.home_view,null);
                ImageView img=(ImageView)itemview.findViewById(R.id.imgView);
                img.setImageResource(img_item[position]);
                TextView textName=(TextView)itemview.findViewById(R.id.txtName);
                textName.setText(text_item[position]);
            }
            return itemview;
        }
    }
  • 實作baseAdapter類別
  • 實作getCount()方法,得到GridView選項有多少,提供多少個View的配置
  • itemview.findViewById 取得選單上每個元件的ID
        gvList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                switch (position){
                    case 0:{
                        intent=new Intent(MainActivity.this,PressureActivity.class);
                        startActivity(intent);
                        break;
                    }

                    case 1:{
                        intent=new Intent(MainActivity.this, SugerActivity.class);
                        startActivity(intent);
                        break;
                    }
                    case 2:{
                        break;
                    }
                    case 3:{
                        finish();
                        break;
                    }
                    default:{
                        Toast.makeText(MainActivity.this,"錯誤",Toast.LENGTH_SHORT).show();
                        break;
                    }
                }
            }
  • 實作點選GridView選項後,到達各個頁面

完整程式碼

public class MainActivity extends AppCompatActivity {
    private GridView gvList;
    private String [] text_item={"血壓","血糖","定時","Exit"};
    private int[] img_item={R.drawable.pressure,R.drawable.sugar,R.drawable.baseline_alarm_black_18dp,R.drawable.exit};
    private Intent intent;
    private NotificationManager manager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        manager();
        findViews();
        myGridAdapter adapter=new myGridAdapter(this);
        gvList.setAdapter(adapter);
    }

    private void manager() {
        manager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
        manager.cancel(0);
    }

    private void findViews() {
        gvList=(GridView) findViewById(R.id.gvList);
        gvList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                switch (position){
                    case 0:{
                        //                        血壓
                        intent=new Intent(MainActivity.this,PressureActivity.class);
                        startActivity(intent);
                        break;
                    }

                    case 1:{
                        //                        血糖
                        intent=new Intent(MainActivity.this, SugerActivity.class);
                        startActivity(intent);
                        break;
                    }
                    case 2:{
                        //                        定時
                        intent=new Intent(MainActivity.this, TimeAlarmActivity.class);
                        startActivity(intent);
                        break;
                    }
                    case 3:{
                        finish();
                        break;
                    }
                    default:{
                        Toast.makeText(MainActivity.this,"錯誤",Toast.LENGTH_SHORT).show();
                        break;
                    }
                }
            }
        });
    }

    public class myGridAdapter extends BaseAdapter{

        private Context context;

        public myGridAdapter(Context context){
            this.context=context;
        }

        @Override
        public int getCount() {
            return text_item.length;
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return img_item[position];
        }

        @Override
        public View getView(int position, View view, ViewGroup viewGroup) {
            View itemview =view;
            if(itemview ==null){
                itemview=getLayoutInflater().inflate(R.layout.home_view,null);
                ImageView img=(ImageView)itemview.findViewById(R.id.imgView);
                img.setImageResource(img_item[position]);
                TextView textName=(TextView)itemview.findViewById(R.id.txtName);
                textName.setText(text_item[position]);
            }
            return itemview;
        }
    }
}

成果

https://ithelp.ithome.com.tw/upload/images/20191010/20121149sTQuAhgDa5.png
以下為圖片來源

血壓機圖片
血糖機圖片
鬧鐘圖片
Exit圖片

若文章有誤,歡迎大家提出建議。

Thank you for your time.


上一篇
[Day23]Android學習-創新挑戰-健康管理app(1)
下一篇
[Day25]Android學習-創新挑戰-健康管理app(3)
系列文
Android Studio 學習交流30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
zxzx0130
iT邦新手 5 級 ‧ 2023-08-15 07:57:35

你好,照做你這個系列的APP後,發現無法跳傳葉面,不知道有哪裡出錯,我完全照做,系統也沒有錯誤通知,請大神幫我解惑!

我要留言

立即登入留言