Android exercise 3
2016-06-22 11:36
501 查看
Android exercise 3
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,调了半天也没调出结果。
我大概总结一下写法:
//创建实例,这个每个活动都有的
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"<
4000
/p>
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);
}
}
}
开始的时候我是用的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;
}
其实只需要修改两个地方,这个是原来的菜单所在的地方。
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>
<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,因为如果不这样写的话,看起来文子与画面就会不匹配。
保存数据的时候:
Bundle bundle = new Bundle();
bundle.putSerializable("user",user);
intent.putExtras(bundle);
获取类的时候:
user = (User)intent.getSerializableExtra("User");
Exercise3还是非常复杂的,光是要求6就做了半天。最后总算是在截止期限之前完成了,非常不容易。
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"<
4000
/p>
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 NetworkInfo类
- android中文件加密和解密的实现
- 获取RSA文件的MD5和SHA1
- android:maxLines与android:ellipsize冲突
- android之View坐标系(view获取自身坐标的方法和点击事件中坐标的获取)
- 给 Android 开发者的 RxJava 详解
- android studio文件名颜色说明
- android 数据库添加字符串 添加失败 解决方案
- AndroidStudio 常用快捷键
- Android延时的几种常用方式
- Android 上下滚动条、轮训滚动、广告条
- android studio sdk 开发
- 如何使用Retrofit写一个Android的REST客户端的小教程
- JAVA/Android位运算符——左移(<<)、右移(>>)、与(&)、非(~)、或(|)、异或(^) .
- 自定义控件—仿IOS7适用于Android的滑动开关
- Android ImageView的属性android:scaleType
- Android_数据库异步查询_Loader_入门
- Android 学习实例 Note笔记本
- Android引导页面
- Android 自定义组合布局