这一篇主要讲应用第一个标签页获取后台数据及异步加载网络图片ImageLoader框架的使用。
首先,隔2s进入应用程序(既然要做就朝着商业应用来),然后通过Android系统提供的轻量级数据保存方式SharedPreferences保存用户名和密码。2s后进入下一Activity代
码如下:
/**
* 欢迎界面,2秒钟后切换进入登录窗体
* @param
* @return
*/
public void welcome(){
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
Thread.sleep(2000);//欢迎界面暂停2秒钟
Message m = Message.obtain();
logHandler.sendMessage(m);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
}
第一个标签页和侧滑布局如下:
<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"
android:fitsSystemWindows="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:orientation="vertical">
<include layout="@layout/top" />
<com.viewpagerindicator.TabPageIndicator
android:id="@+id/indicator"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
<ListView
android:id="@+id/left_drawer"
android:layout_width="300dp"
android:layout_height="match_parent"
android:layout_gravity="left"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="#ffffff"
/>
</android.support.v4.widget.DrawerLayout>
其中,top布局为标签页中包含自定义圆形头像的红色区域,其中圆形头像区域继承了ImageView,实现了自定义。
TabPageIndicator设置各个标签页的代码如下:
FragmentPagerAdapter adapter = new TabPageIndicatorAdapter(getSupportFragmentManager()); ViewPager pager = (ViewPager) findViewById(R.id.pager); pager.setAdapter(adapter); // 实例化TabPageIndicator然后设置ViewPager与之关联 TabPageIndicator indicator = (TabPageIndicator) findViewById(R.id.indicator); indicator.setViewPager(pager); // 如果我们要对ViewPager设置监听,用indicator设置就行了 indicator.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int arg0) { //Toast.makeText(getApplicationContext(), TITLE[arg0],Toast.LENGTH_SHORT).show(); } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageScrollStateChanged(int arg0) { } });
/** * ViewPager适配器 * */ class TabPageIndicatorAdapter extends FragmentPagerAdapter { public TabPageIndicatorAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { if(0 == position){ // 新建一个Fragment来展示ViewPager item的内容,并传递参数 One fragment = new One(); return fragment; }else{ // 再建一个Fragment来展示ViewPager item的内容,并传递参数 Three fragment = new Three(); return fragment; } }
第一个标签页的fragnent异步获取json对象AsyncTask<String, Void, List<Sports>>,其中加载图片用了ImageLoader框架,下载速度快,基本不会出现内存泄漏。
ImageLoader loader = ImageLoader.getInstance(); options = new DisplayImageOptions.Builder() .showImageOnLoading(R.drawable.ic_launcher) // 正在加载 .showImageForEmptyUri(R.drawable.ic_launcher) // 空图片 .showImageOnFail(R.drawable.ic_launcher) // 错误图片 .cacheInMemory(true).cacheOnDisk(true).considerExifParams(true) .bitmapConfig(Bitmap.Config.RGB_565).build();
ImageView imageView = (ImageView) view.findViewById(R.id.photo);//获取每个item中imageView的id String path = list.get(position).getImgPathString().toString();//BaseAdapter适配器填充数据到ListView,返回图片链接 loader.displayImage(path, imageView, options);