城堡中的美女(2)

167 阅读3分钟

城堡中的美女(2)–主界面

主界面布局:
一个抽屉样式, 中间内容的是一个FragmentLayout 和左侧的listview的
的图片的类别:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" > <!-- 抽屉样式的内容 -->
    <FrameLayout
        android:id="@+id/main_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </FrameLayout> <!-- 抽屉的左侧抽屉 -->
    <ListView
        android:id="@+id/mian_left_drawer_lv"
        android:layout_width="200dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="#c2cb"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp" >
    </ListView>
</android.support.v4.widget.DrawerLayout>

左侧listview的数据源在res/values/arrays.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string-array name="planets_array">
        <item>气质</item>
        <item>校花</item>
        <item>时尚</item>
        <item>素颜 </item>
        <item>唯美</item>
        <item>清纯</item>
        <item>可爱</item>
        <item>长发</item>
        <item>小清新</item>
        <item>嫩萝莉</item>
        <item>网络美女</item>
        <item>设置</item>
    </string-array>
    <string-array name="planets_array2">
        <item>全部</item>
        <item>风景</item>
        <item>创意</item>
        <item>名车</item>
        <item>影视 </item>
        <item>游戏</item>
        <item>动漫</item>
        <item>气质</item>
        <item>可爱</item>
        <item>素颜</item>
        <item>明星</item>
        <item>设置</item>
    </string-array>
    <string-array name="hights">
        <item>240</item>
        <item>600</item>
        <item>768</item>
    </string-array>

</resources>

通过getResources().getStringArray(int ):

    mPlanetTitles = getResources().getStringArray(R.array.planets_array);

添加一个万能适配器

private SparseArray mViews;
用来存储listviewitem布局文件的控件的容器 是一个Map形式,
比Map效率高, SpareArray
put(int, view);
第一次由于直接将容器最终化,大致listView布局显示内容出现问题

主界面

     主界面

ActionBarDrawerToggle的使用
遇到到的问题, 一开是这是actionBar出现异常, 发现NullPointerException
原来是写了下面的无标题, 而忘了actionBar ,导致getActionBar() =null

//requestWindowFeature(Window.FEATURE_NO_TITLE);

使用ActionBarDrawerToggle来监视Drawlayout的打开和关闭

package com.chb.beautifalGrils.app.activity;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.SearchManager;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;


import com.chb.beautifalGrils.R;
import com.chb.beautifalGrils.app.adapter.Bean;
import com.chb.beautifalGrils.app.adapter.CommonAdapter;
import com.chb.beautifalGrils.app.adapter.LeftBean;
import com.chb.beautifalGrils.app.adapter.MagicViewHolder;
/**
 * 主界面
 * @author chb
 */
public class MainActivity extends Activity {
    /**
     * ActionBarDrawerToggle  是 DrawerLayout.DrawerListener实现。
        和 NavigationDrawer 搭配使用,推荐用这个方法,符合Android design规范。
        作用:
        1.改变android.R.id.home返回图标。
        2.Drawer拉出、隐藏,带有android.R.id.home动画效果。
        3.监听Drawer拉出、隐藏;
     */
    private ActionBarDrawerToggle mDrawerToggle;
    /**
     *这个抽屉布局
     */
    private DrawerLayout mDrawerLayout;
    /**
     *左侧的listView
     */
    private ListView mDrawerListView;
    private List<Bean> LeftDatas;
    /**
     * 左侧的listview数据
     */
    private String[] mPlanetTitles;
    private CommonAdapter<Bean> commonAdapter = null;
    /**
     *抽屉关闭时的标题
     */
    protected CharSequence mTitle;
    /**
     * 抽屉打开时的标题
     */
    protected CharSequence mDrawerTitle;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

    /*  AppConnect.getInstance(this).setCrashReport(true);
        AseoZdpAseo.init(this, AseoZdpAseo.INSERT_TYPE);*/

        initData();
        initView();
        if(savedInstanceState == null){
            selectItem(0);
        }


    }
    /**
     * 视图的初始化
     */
    private void initView() {
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerListView = (ListView) findViewById(R.id.mian_left_drawer_lv);
        //mDrawerListView.setAdapter(new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, mPlanetTitles));
        mDrawerListView.setAdapter(commonAdapter);

        //当抽屉打开,  将内容区域用阴影覆盖, 使用一个.9图片
        mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
                GravityCompat.START);


        /**
         * 设置listview点击事件
         */
        mDrawerListView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> paramAdapterView,
                    View paramView, int position, long paramLong) {
                    selectItem(position);
            }
        });
        try {
            ///使应用程序图标表现为ActionBar动作切换导航抽屉
            getActionBar().setDisplayHomeAsUpEnabled(true);
            getActionBar().setHomeButtonEnabled(true);
        } catch (Exception e) {
            e.printStackTrace();
        }



        /**
         * 内部实现抽屉状态监听
         * onDrawerOpen
         * onDrawerClose
         */
        mDrawerToggle = new ActionBarDrawerToggle(
                MainActivity.this, 
                mDrawerLayout, 
                R.drawable.ic_drawer, 
                R.string.drawer_open,
                R.string.drawer_close){
            @Override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
                getActionBar().setTitle(mTitle);
                invalidateOptionsMenu(); // creates call to
                                            // onPrepareOptionsMenu()
            }
            @Override
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                getActionBar().setTitle(mDrawerTitle);
                invalidateOptionsMenu(); // creates call to
                                            // onPrepareOptionsMenu()
            }
        };
        //设置抽屉状态监听事件
        mDrawerLayout.setDrawerListener(mDrawerToggle);
    }

    /**
     * listview点击position位置
     * @param position
     */
    protected void selectItem(int position) {
        if (position == 11) {
            Intent mIntent = new Intent(MainActivity.this, SettingActivity.class);
            startActivity(mIntent);
        } else {
            /**
             *  update the main content by replacing fragments
             *  替换内容区域的fragment
             */
            Fragment fragment = new PlanetFragment();
            Bundle args = new Bundle();
            args.putInt(PlanetFragment.ARG_PLANET_NUMBER, position);
            fragment.setArguments(args);

            FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.beginTransaction()
                    .replace(R.id.main_content, fragment).commit();

            // update selected item and title, then close the drawer
            mDrawerListView.setItemChecked(position, true);
            setTitle(mPlanetTitles[position]);
            mDrawerLayout.closeDrawer(mDrawerListView);
        }
    }
    /**
     * 初始化数据
     */
    private void initData() {
        //顶部的显示表听
        mTitle = mDrawerTitle = (String) getTitle();
        mPlanetTitles = getResources().getStringArray(R.array.planets_array);
        LeftDatas = new ArrayList<Bean>();
        for (int i = 0; i < mPlanetTitles.length; i++) {
            LeftBean leftBean = new LeftBean(mPlanetTitles[i]);
            LeftDatas.add(leftBean);
        }

        //初始化左侧listview适配器的数据
        commonAdapter = new CommonAdapter<Bean>(LeftDatas, R.layout.main_left_listview_item, MainActivity.this) {
            @Override
            protected void doView(MagicViewHolder magicViewHolder) {
                LeftBean leftBean = (LeftBean)LeftDatas.get(magicViewHolder.getPosition());
                Toast.makeText(MainActivity.this, "--->"+leftBean+"position:"+magicViewHolder.getPosition(), 1).show();
                ((TextView)magicViewHolder.getView(R.id.main_left_listview_item_tv1)).setText(leftBean.getText());
            }
        }; 
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // The action bar home/up action should open or close the drawer.
        // ActionBarDrawerToggle will take care of this.
        if (mDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }
        // Handle action buttons
        switch (item.getItemId()) {
        case R.id.action_websearch:
            // create intent to perform web search for this planet
            Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
            intent.putExtra(SearchManager.QUERY, getActionBar().getTitle());
            // catch event that there's no activity to handle intent
            if (intent.resolveActivity(getPackageManager()) != null) {
                startActivity(intent);
            } else {
                Toast.makeText(this, R.string.app_not_available,
                        Toast.LENGTH_LONG).show();
            }
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }


    @Override
    public void setTitle(CharSequence title) {
        mTitle = title;
        getActionBar().setTitle(mTitle);
    }

    /**
     * When using the ActionBarDrawerToggle, you must call it during
     * onPostCreate() and onConfigurationChanged()...
     */
    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // Sync the toggle state after onRestoreInstanceState has occurred.
        mDrawerToggle.syncState();
    }


    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        // Pass any configuration change to the drawer toggls
        mDrawerToggle.onConfigurationChanged(newConfig);
    }



}