基於Android的計步器(Pedometer)的講解—ExpandableListView

來源:互聯網
上載者:User

基於Android的計步器(Pedometer)的講解—ExpandableListView

今天移動開發課程驗收完成,可以小小的鬆一口氣了,感覺在同學中,自己做的這個計步器還是挺不錯的嘛~~

然後對原來的手機計步器(pedometer)項目又做了一些完善:

 

先給出ExpandableListView的一些

先給出ExpandableListViewAdapter的代碼:

 

package com.bit.expandablelistview;import java.util.HashMap;import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseExpandableListAdapter;import android.widget.ExpandableListView;import android.widget.ImageView;import android.widget.TextView;public class ExpandableListViewAdapter extends BaseExpandableListAdapter {private List group;//這是組視圖private HashMap> child;//這是子視圖private ExpandableListView listView;//當選擇另一個組視圖時關閉當前開啟的組視圖private LayoutInflater inflater;//載入布局檔案private int last;//判斷是否開啟當前的頁面public ExpandableListViewAdapter(Context context, List group,HashMap> child, ExpandableListView listView) {this.group = group;this.child = child;this.listView = listView;this.inflater = LayoutInflater.from(context);}/** * 對外提供一個借口,當資料改變時調用這個函數 * @param group * @param child */public void setOnDataChanged(List group,HashMap> child) {this.group = group;this.child = child;this.notifyDataSetChanged();}@Overridepublic int getGroupCount() {// TODO Auto-generated method stubreturn group.size();}@Overridepublic int getChildrenCount(int groupPosition) {List tempList = child.get(group.get(groupPosition));if (tempList != null) {return tempList.size();} else {return 0;}}@Overridepublic Object getGroup(int groupPosition) {// TODO Auto-generated method stubreturn group.get(groupPosition);}@Overridepublic Object getChild(int groupPosition, int childPosition) {// TODO Auto-generated method stubreturn child.get(group.get(groupPosition)).get(childPosition);}@Overridepublic long getGroupId(int groupPosition) {// TODO Auto-generated method stubreturn groupPosition;}@Overridepublic long getChildId(int groupPosition, int childPosition) {// TODO Auto-generated method stubreturn childPosition;}@Overridepublic boolean hasStableIds() {// TODO Auto-generated method stubreturn false;}/** * 得到組視圖布局檔案,對這個進行了最佳化,可以看到converView是一個Android提供的緩衝的對象,如果第一次沒有這個布局檔案 * 就建立一個,如果有的話,直接從convertView得到,不用進行建立,減少記憶體開銷 */public View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) {String groupName = group.get(groupPosition);View view;TextView name;if (convertView == null) {view = inflater.inflate(R.layout.group_item, null);name = (TextView) view.findViewById(R.id.group_number);view.setTag(name);} else {view = convertView;name = (TextView) view.getTag();}name.setText(groupName);return view;}private class ViewHolder {ImageView picture;TextView name;}/** * 得到子視圖的布局檔案,類似於組視圖 */@Overridepublic View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent) {User user = child.get(group.get(groupPosition)).get(childPosition);View view;ViewHolder viewHolder;if (convertView == null) {view = inflater.inflate(R.layout.child_item, null);viewHolder = new ViewHolder();viewHolder.picture = (ImageView) view.findViewById(R.id.pic);viewHolder.name = (TextView) view.findViewById(R.id.child_name);view.setTag(viewHolder);} else {view = convertView;viewHolder = (ViewHolder) view.getTag();}viewHolder.name.setText(user.getName());viewHolder.picture.setImageResource(user.getPicture());return view;}/** * 設定可以點擊子視圖 */@Overridepublic boolean isChildSelectable(int groupPosition, int childPosition) {// TODO Auto-generated method stubreturn true;}@Overridepublic void onGroupExpanded(int groupPosition) {super.onGroupExpanded(groupPosition);if (groupPosition != last) {listView.collapseGroup(last);}last = groupPosition;}}

然後給出MainActivity類的代碼

 

 

package com.bit.expandablelistview;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.ExpandableListView;import android.widget.ExpandableListView.OnChildClickListener;import android.widget.Toast;public class MainActivity extends Activity implements OnChildClickListener {private List group;//這是組視圖private HashMap> child;//這是子視圖private ExpandableListView listView;//這是可以擴充的listviewprivate ExpandableListViewAdapter adapter;//這是子視圖要載入的所有圖片private int pic[] = new int[] { R.drawable.head1, R.drawable.head2,R.drawable.head3, R.drawable.head4, R.drawable.head5,R.drawable.head6, R.drawable.head7, R.drawable.head8,R.drawable.head9, R.drawable.head10 };@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();prepareData();showData();}/** * 顯示資料 */private void showData() {if (adapter == null) {adapter = new ExpandableListViewAdapter(this, group, child,listView);listView.setAdapter(adapter);} else {adapter.setOnDataChanged(group, child);}}/** * 初始化一些參數,設定監聽事件 */private void init() {group = new ArrayList();child = new HashMap>();listView = (ExpandableListView) findViewById(R.id.expandlistview);listView.setOnChildClickListener(this);}/** * 準備測試資料 */private void prepareData() {group.add(第一組);group.add(第二組);group.add(第三組);List users = new ArrayList();for (int i = 0; i < 4; i++) {User user = new User();user.setName(張全蛋 + i);user.setPicture(pic[i]);users.add(user);}child.put(group.get(0), users);users = new ArrayList();for (int i = 4; i < 7; i++) {User user = new User();user.setName(李鐵柱 + i);user.setPicture(pic[i]);users.add(user);}child.put(group.get(1), users);users = new ArrayList();for (int i = 7; i < 10; i++) {User user = new User();user.setName(唐馬儒 + i);user.setPicture(pic[i]);users.add(user);}child.put(group.get(2), users);}@Overridepublic boolean onChildClick(ExpandableListView parent, View v,int groupPosition, int childPosition, long id) {//點擊顯示當前子視圖的位置Toast.makeText(MainActivity.this,你點擊的是+ child.get(group.get(groupPosition)).get(childPosition).getName(),Toast.LENGTH_SHORT).show();return false;}}

大家注意,其中的User類是自己定義的一個類。

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.