Android exercise 3
来源:互联网 发布:淘宝页面装修教程 编辑:程序博客网 时间:2024/04/30 05:05
Android exercise 3
1. GridView
第一个要求是把上次的ListView改成GridView,这个其实不难,但是我对GirdView一点都不了解,所以调了一段时间,其实直接用GirdView替换掉ListView就可以了。
gridView = (GridView) findViewById(R.id.grid_view);
gridView.setAdapter(customAdapter);
gridView.setOnItemClickListener(new OnItemClickListener(){}
注意修改布局文件
<GridView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/grid_view"
android:numColumns="auto_fit"
android:stretchMode="columnWidth">
</GridView>
我开始把GridView写成了GirdLayout,调了半天也没调出结果。
2. ViewPager的使用
这个东西挺复杂的,我的一个foodView就用了三层布局,6,7个布局文件。
我大概总结一下写法:
//创建实例,这个每个活动都有的
super.onCreate(savedInstanceState);
//获取当前布局,进行编辑
LayoutInflater inflater =getLayoutInflater();
//创建一个pageView,准备以后嵌入
pageViews = newArrayList<View>();
//加入pageView中的四个页
View pageHot =inflater.inflate(R.layout.page_hot,null);
View pageCold =inflater.inflate(R.layout.page_cold,null);
View pageSeaFood =inflater.inflate(R.layout.page_seafood,null);
View pageWine =inflater.inflate(R.layout.page_wine,null);
pageViews.add(pageHot);
pageViews.add(pageCold);
pageViews.add(pageSeaFood);
pageViews.add(pageWine);
//获取四个页面中的ListView,并往ListView中加适配器
lvHot =(ListView)pageHot.findViewById(R.id.list_hot);
lvCold =(ListView)pageCold.findViewById(R.id.list_cold);
lvSeaFood =(ListView)pageSeaFood.findViewById(R.id.list_seafood);
lvWine =(ListView)pageWine.findViewById(R.id.list_wine);
listData = getListData();
lvHot.setAdapter(newCustomAdapter(this, LayoutInflater.from(this),HOT));
lvCold.setAdapter(newCustomAdapter(this, LayoutInflater.from(this),COLD));
lvSeaFood.setAdapter(new CustomAdapter(this,LayoutInflater.from(this),SEAFOOD));
lvWine.setAdapter(newCustomAdapter(this, LayoutInflater.from(this),WINE));
//获取pageView中的button,并对它们设置监听器
<Button
android:id="@+id/seafood"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_weight = "1"
android:textSize="18sp"
android:textColor="@android:color/black"
android:text="海鲜"
android:padding="7dp"
android:textStyle="bold"
/>
buttons = new Button[pageViews.size()];
buttonsLine =(ViewGroup)inflater.inflate(R.layout.food_view,null);
hot = (Button)buttonsLine.findViewById(R.id.hot);
cold =(Button)buttonsLine.findViewById(R.id.cold);
seaFood =(Button)buttonsLine.findViewById(R.id.seafood);
wine =(Button)buttonsLine.findViewById(R.id.wine);
buttons[HOT]=hot;
buttons[COLD]=cold;
buttons[SEAFOOD]=seaFood;
buttons[WINE]=wine;
hot.setOnClickListener(newGuideButtonClickListener(HOT));
cold.setOnClickListener(newGuideButtonClickListener(COLD));
seaFood.setOnClickListener(newGuideButtonClickListener(SEAFOOD));
wine.setOnClickListener(newGuideButtonClickListener(WINE));
//把buttons加入到pageView中
viewPager =(ViewPager)buttonsLine.findViewById(R.id.guidePages);
setContentView(buttonsLine);
//为viewPage添加适配器和监听器
viewPager.setAdapter(newGuidePageAdapter());
viewPager.setOnPageChangeListener(newGuidePageChangeListener());
这是为上面复写的一些适配器,可以看出这个viewPager真的非常复杂
class GuidePageAdapter extends PagerAdapter{
@Override
public int getItemPosition(Objectobject) {
returnsuper.getItemPosition(object);
}
@Override
public void destroyItem(ViewGroupcontainer, int position, Object object) {
((ViewPager)container).removeView(pageViews.get(position));
}
@Override
public Object instantiateItem(Viewcontainer, int position) {
((ViewPager)container).addView(pageViews.get(position));
return pageViews.get(position);
}
@Override
public int getCount() {
return pageViews.size();
}
@Override
public boolean isViewFromObject(Viewview, Object object) {
return view==object;
}
}
class GuidePageChangeListener implementsViewPager.OnPageChangeListener {
@Override
public void onPageScrolled(intposition, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(intposition) {
}
@Override
public voidonPageScrollStateChanged(int state) {
}
}
class GuideButtonClickListener implementsView.OnClickListener {
private int index = 0;
public GuideButtonClickListener(int i){
index = i;
}
public void onClick(View v)
{
viewPager.setCurrentItem(index,true);
}
}
}
3. 数据的问题
由于布局有了三层,所以数据也有了三层,在保存数据的时候我也遇到了一些问题。
开始的时候我是用的List<List<HashMap<String,Object>>>,然后发现无法申请实例,经过查找资料,我发现第二层得用实际的泛型,所以我最后是使用了
List<ArrayList<HashMap<String, Object>>>
勉强能用。
List<ArrayList<HashMap<String, Object>>> listData =new ArrayList<ArrayList<HashMap<String, Object>>>();
HashMap<String, Object> item = null;
ArrayList<HashMap<String,Object>> itemList = null;
for (int i=0;i<4;i++) {
itemList= new ArrayList<HashMap<String, Object>>();
for (intj = 0; j < 3; j++) {
item= new HashMap<String, Object>();
item.put("name", itemName[i][j]);
item.put("price", "价格:"+itemPrice[i][j]);
itemList.add(item);
}
listData.add(itemList);
}
return listData;
}
4. ActionBar的问题
写这个actionBar我也花了不少时间。网上的资料写得非常一般。
其实只需要修改两个地方,这个是原来的菜单所在的地方。
public booleanonCreateOptionsMenu(Menu menu) {
MenuInflater inflater= getMenuInflater();
inflater.inflate(R.menu.food_view_menu,menu);
return true;
}
但是,如果只写onCreateOptionsMenu的话,在界面中是不会出现ActionBar的,我们需要做的修改是theme,把主题修改之后,我们才能在界面中看到ActionBar,从而点击到我们编辑的ActionBar,我当时找了四五个文档,没一个文档说清楚这件事的,全都在扯什么版本什么什么玩意,一点用都没有,实际上就是加上theme的设置就可以了。
<activity android:name=".FoodView"
android:theme="@android:style/Theme.Holo.Light"></activity>
5. 一个页面中ListView加别的组件
这次作业的FoodOrderView要求在一个页面中包含ListView和两个TextView再加一个Button,实际上直接加的可以了,要注意的是每一个组件的高度,如果高度没写好,页面出来以后会非常难看。
<ListView
android:layout_marginTop="50dp"
android:id="@+id/list_ordered"
android:layout_width="wrap_content"
android:layout_height="400dp">
</ListView>
<TextView
android:id="@+id/ordered_totoal_number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="菜单总数"/>
<TextView
android:id="@+id/ordered_total_price"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="订单总价"/>
<Button
android:id="@+id/ordered_total_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="结账"/>
注意到layout_height全部都写的wrap_content,因为如果不这样写的话,看起来文子与画面就会不匹配。
6.通过Intent传递类
这个还是有点复杂的,我在这个地方记录一下吧。
保存数据的时候:
Bundle bundle = new Bundle();
bundle.putSerializable("user",user);
intent.putExtras(bundle);
获取类的时候:
user = (User)intent.getSerializableExtra("User");
Exercise3还是非常复杂的,光是要求6就做了半天。最后总算是在截止期限之前完成了,非常不容易。
- Android exercise 3
- Exercise of Thread(3)
- Exercise 2.1-3
- Exercise 2-3
- Python Exercise #3
- Chapter 3-exercise
- Exercise #3: Past Simple
- Exercise
- exercise
- Exercise
- exercise
- Chapter 3, Exercise 3.2.3
- Accelerrated C++ Exercise 3-3
- 算法导论 Exercise 3.1-3
- Exercise 3: Numbers And Math
- Exercise 3: Multivariate Linear Regression
- C程序设计语言 Exercise 3-1
- Chapter 3, Exercise 3.2.4
- 关于于渊的自己写操作系统Windows环境搭建
- 高可用、开源的Redis缓存集群方案
- android中文件加密和解密的实现
- android NetworkInfo类
- linux下杀死进程(kill)的N种方法
- Android exercise 3
- mpc8260 18
- docker常用命令中文翻译
- Spring相关知识
- 经典SQL语句大全、50个常用的sql语句
- 6.24 AppCan移动开发者大会:议程重大更新,报名即将关闭
- Product of Array Except Self
- Android Studio编译出错 AssertionError: Already disposed: Module: 'app'
- m3u8详解