【该项目实训是Android基础知识的一个综合练习,特别提示:项目中会用到一些图片素材,都是随意整理的,稍后会上传一个资源,包含该事项项目的基本功能,也含有图片素材】
【项目题目】:校园订餐App设计
综合案例
【目标】
主界面的功能确实比较复杂,因此上一篇知识说的周边内容。现在开始说这个界面的代码和布局文件。
1、先看一下项目的组织结构吧,要不然不好说他们的关系:
(1)db包中的都是跟 数据库相关的
(2)eatall中放的都是activity或者fragment
(3)entity中放的实体类
(4)util中放的是工具类
2、主界面activity类是MainActivity,注意它继承的是ActivityGroup,因为还没用使用Fragment
/** * 百米购的主界面,内含一个TabHost,作为主导航使用 * @author Administrator */ public class MainActivity extends ActivityGroup { TabHost tabHost; GridView gv; String mainMenus[]={"百米美食","百米餐馆","推荐美食","我的最爱", "健康跟踪","美食心得","查看菜系","我的账单", "提前预定","系统帮助","百米设置","注册信息"}; int mainMenuIcons[]=new int[12]; List<Map<String,Object>> menuData ;//Tab3中主菜单的 数据 EatApp app ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tabHost=(TabHost) findViewById(R.id.mainTabHost); //初始化导航界面 initTabHost(); app=(EatApp) getApplication(); } // private void initTabHost() { tabHost.setup();//使用TabHost控件时,必须加入该程序 tabHost.setup(getLocalActivityManager()); TabSpec tab1=tabHost.newTabSpec("t1"); tab1.setIndicator("促销打折",getResources().getDrawable(R.drawable.logo_s) ); Intent intent1=new Intent(MainActivity.this,DiscountFoodActivity.class); tab1.setContent(intent1); TabSpec tab2=tabHost.newTabSpec("t2"); tab2.setIndicator("我的账单",getResources().getDrawable(R.drawable.logo_s) ); Intent intent2=new Intent(MainActivity.this,AccountActivity.class); tab2.setContent(intent2); TabSpec tab3=tabHost.newTabSpec("t3"); tab3.setIndicator("百米购",getResources().getDrawable(R.drawable.logo_s) ); tab3.setContent(R.id.main_tabMainFace); tabHost.addTab(tab1); tabHost.addTab(tab2); tabHost.addTab(tab3); //初始化Tab3的主导航页面 gv=(GridView) findViewById(R.id.main_tabMainFace_gv); initGridView(); } //对Tag3中的主导航GridView进行初始化 private void initGridView() { for (int i = 0; i <mainMenuIcons.length; i++) { mainMenuIcons[i]=R.drawable.mainmenu_01+i; } menuData=new ArrayList<Map<String,Object>>(); for (int i = 0; i < mainMenus.length; i++) { Map<String,Object>item =new HashMap<String,Object>(); item.put("menuImg", mainMenuIcons[i]); item.put("menuTitle", mainMenus[i]); menuData.add(item); } SimpleAdapter sa =new SimpleAdapter( this, menuData, R.layout.mainmenulist_item, new String[]{"menuImg","menuTitle"}, new int[]{R.id.mainMenu_item_img,R.id.mainMenu_item_title} ); gv.setAdapter(sa); gv.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { }} ); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } //菜单点击 @Override public boolean onOptionsItemSelected(MenuItem item) { Intent intent=null ; switch(item.getItemId()){ case R.id.menu_shopcat: //查看购物车菜单 intent =new Intent(MainActivity.this,ShopcartActivity.class); break; case R.id.menu_info: //查看个人信息 Log.i("Msg", app.userInfo+" 登录信息"); if(app.userInfo!=null){ intent =new Intent(MainActivity.this,UserinfoActivity.class); }else{ new LoginDialog(this); } break; case R.id.menu_setting: //系统设置菜单 break; case R.id.menu_exit: //系统推出菜单 MainActivity.this.finish(); break; } if(intent!=null) startActivity(intent); return super.onOptionsItemSelected(item); } @Override protected void onResume() { super.onResume(); if(app.userInfo!=null){ setTitle("百米购["+app.userInfo.getUserName()+"]"); } } /*退出时,情况购物车中的数据*/ @Override protected void onDestroy() { super.onDestroy(); EatApp app=(EatApp) getApplication(); app.orderItems.clear(); app.userInfo=null; finish(); } }
此处对几个方法的功能,进一步说明:
(1)
TabHost tabHost;
这个是底部的Tab导航要用的。
(2)下面这几个是 第三个Tab中要用的内容
GridView gv; String mainMenus[]={"百米美食","百米餐馆","推荐美食","我的最爱", "健康跟踪","美食心得","查看菜系","我的账单", "提前预定","系统帮助","百米设置","注册信息"}; int mainMenuIcons[]=new int[12]; List<Map<String,Object>> menuData ;//Tab3中主菜单的 数据
(3)
EatApp app ;
这是自定义的一个Application类,目的是让不同的Activity可以共用一部分数据【后面还有说明的】
(4)代码中涉及到很多其他的Activity和类,先说明一下
<span style="background-color: rgb(153, 255, 153);">DiscountFoodActivity.class :这个地方是 打折促销的 Activity界面</span>
<span style="background-color: rgb(153, 255, 153);">AccountActivity.class :这个是账单信息Activity界面</span>
<span style="background-color: rgb(153, 255, 153);">ShopcartActivity.class : 查看购物车菜单被点击,前往购物车Activity界面</span>
<pre name="code" class="java"><span style="background-color: rgb(153, 255, 153);">UserinfoActivity.class :用户信息Activity界面</span>
<span style="background-color: rgb(153, 255, 153);">new LoginDialog(this) : 有一个自定义的对话框界面,实现用户登录</span>
3、主界面的布局文件是:
<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="match_parent" tools:context=".MainActivity" > <TabHost android:id="@+id/mainTabHost" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <FrameLayout android:id="@android:id/tabcontent" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" > <LinearLayout android:id="@+id/main_tabMainFace" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <GridView android:id="@+id/main_tabMainFace_gv" android:layout_width="match_parent" android:layout_height="match_parent" android:numColumns="4" android:padding="8dp" android:gravity="center_horizontal" ></GridView> </LinearLayout> </FrameLayout> <TabWidget android:id="@android:id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" > </TabWidget> </LinearLayout> </TabHost> </RelativeLayout>
注意将TabWidget放在下面,以实现标签导航在下的方式。
4、上面用到一个GridView,它的元素采用的布局文件是:
<?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="vertical" android:gravity="center_horizontal" > <ImageView android:id="@+id/mainMenu_item_img" android:layout_width="80dp" android:layout_height="80dp" android:scaleType="centerCrop" /> <TextView android:id="@+id/mainMenu_item_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16sp" android:layout_marginTop="5dp" android:text="菜单名" /> </LinearLayout>
结束,下一篇,说明主界面中的三个子界面是如果实现的。
时间: 2024-08-02 15:12:17