01_第二阶段开发:自定义不能滑动ViewPager
帧布局的好处就是给一个全新的画板,里面的完全是空的,可以任意去放任何组件
继承viewpager,禁止page滑动
02_设置界面是否能滑动出左侧菜单
03_添加按钮事件来控制左侧菜单的显示或关闭
左侧菜单属于mainActivity的一部分,而导航按钮属于main_content_menu的一部分
04_Viewpager的懒加载
测试程序顶格写,方便删除
05_第三阶段需求:开发左侧菜单和对应的空页面
06_获取服务器的json数据并通过Gson解析(省略)
07_左侧菜单数据的获取和显示
08_左侧菜单的listview的显示和事件处理
09_通过点击左侧菜单切换新闻中心的四个页面
目前只有第一个博客首页可以真正实现左侧菜单的切换
10_通过接口回调实现左侧菜单控制新闻中心页面的切换
11_第三开发阶段的总结
第三阶段
1.获取数据
http://10.0.2.2:8080/zhbj/categories.json
2.设置左侧菜单的显示和数据
1.显示
采用ListView
//listview显示左侧菜单
lv_leftData = new ListView(mainActivity);
//背景是黑色
lv_leftData.setBackgroundColor(Color.BLACK);
//选中拖动的背景色
设置成透明
lv_leftData.setCacheColorHint(Color.TRANSPARENT);
//设置选中时为透明背景
lv_leftData.setSelector(new ColorDrawable(Color.TRANSPARENT));
//没有分割线
lv_leftData.setDividerHeight(0);
//距顶部为45px
lv_leftData.setPadding(0, 45, 0, 0);
2.条目显示
采用TextView
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dip"
android:text="新闻"
android:enabled="false"
android:textColor="@color/leftmenu_list_item_tv_color"
android:drawablePadding="10dip"
android:layout_marginLeft="10dip"
android:drawableLeft="@drawable/leftmenu_list_item_tv_drawable"
android:textSize="20sp" >
</TextView>
3. 数据适配器
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//显示数据
TextView tv_currentView;
if (convertView == null) {
tv_currentView = (TextView) View.inflate(mainActivity, R.layout.leftmenu_list_item, null);
} else {
tv_currentView = (TextView) convertView;
}
//设置数据
tv_currentView.setText(data.get(position).title);
//判断是否被选中
tv_currentView.setEnabled(position == selectPosition);
return tv_currentView;
}
4. 设置listview选择事件
//设置listview的选择事件
lv_leftData.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
//保存选中的位置
selectPosition = position;
//更新界面
adapter.notifyDataSetChanged();
//控制新闻中心,四个新闻页面的显示
//mainActivity.getMainMenuFragment().leftMenuClickSwitchPage(selectPosition);
if (switchListener != null) {
switchListener.switchPage(selectPosition);
} else {
mainActivity.getMainMenuFragment().leftMenuClickSwitchPage(selectPosition);
}
//切换SlidingMenu的开关
mainActivity.getSlidingMenu().toggle();
}
});
- 新闻中心的四个页面的设计首先页面的基类 protected MainActivity mainActivity ; protected View root;//根布局 public BaseNewsCenterPage(MainActivity mainActivity) { this.mainActivity = mainActivity; root = initView(); initEvent(); }
-
/**
-
* 子类覆盖此方法完成事件的处理
-
*/
-
public void initEvent(){
-
-
}
-
-
/**
-
* 子类覆盖此方法来显示自定义的View
-
* @return
-
*/
-
public abstract View initView();
-
-
public View getRoot(){
-
return root;
-
}
-
-
-
/**
-
* 子类覆盖此方法完成数据的显示
-
*/
-
public void initData(){
-
-
}
创建四个页面,一个为例: public class PhotosBaseNewsCenterPage extends BaseNewsCenterPage {
public PhotosBaseNewsCenterPage(MainActivity mainActivity) {
super(mainActivity);
// TODO Auto-generated constructor stub
}
@Override
public View initView() {
TextView tv = new TextView(mainActivity);
tv.setText("组图的内容");
tv.setTextSize(25);
tv.setGravity(Gravity.CENTER);
return tv;
}
}
4.新闻中心数据处理
1.解析json数据
2. 给左侧菜单设置数据
3. 设置页面选择的方法
4. 设置监听回调
5. 通过MainActivity切换页面
12_第四阶段开发功能分析
13_新闻中心页面的实现(采用ViewPagerIndicator开源框架)