您的位置:首页 > 移动开发 > Android开发

Android exercise 3

2016-06-22 11:36 501 查看
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"<
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就做了半天。最后总算是在截止期限之前完成了,非常不容易。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: