android项目智慧北京开发完整步骤:第二天

来源:互联网 发布:网络教学的缺点 编辑:程序博客网 时间:2024/05/16 01:37

不能滚动的ViewPager

public class NoScrollViewPagerextends ViewPager {

 

public NoScrollViewPager(Context context) {

super(context);

// TODO Auto-generated constructor stub

}

 

public NoScrollViewPager(Context context, AttributeSet attrs) {

super(context, attrs);

// TODO Auto-generated constructor stub

}

 @Override

public boolean onTouchEvent(MotionEvent arg0) {

 return true;

}

}

从服务器获取数据

/**

 * 从服务器获取数据

 */

private void getDataFromServer(){

HttpUtils utils=new HttpUtils();

utils.send(HttpMethod.GET, Constants.CATEGORIES_URL,new RequestCallBack<String>() {

@Override

public void onSuccess(ResponseInfo<String> responseInfo) {

// TODO Auto-generated method stub

String result=responseInfo.result;

processResult(result);

}

 

@Override

public void onFailure(HttpException error, String msg) {

}

});

}

Gson解析

导入jar

 



创建实体类

 

/**

 * 新闻中心分类数据

 * gson对象封装原则

 * 遇到{}就是一个对象

 * 遇到[]就是一个ArrayList

 * 对象中所有属性名必须和服务器返回字段完全一致

 * @author Administrator

 *

 */

public class NewMenuData {

public int retcode;

public ArrayList<String>extend;

public class NewsData{

public Stringid;

public Stringtitle;

public int type;

public ArrayList<NewsTabData>children;

}

//页签信息封装

public class NewsTabData{

public Stringid;

public Stringtitle;

public Stringurl;

public int type;

}

}

/**

 * 解析json数据

 */

protected void processResult(String result) {

Gson gson=new Gson();

NewMenuData fromJson = gson.fromJson(result, NewMenuData.class);

}

左侧menu菜单

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

android:background="#000"

    android:orientation="vertical" >

 

    <ListView

        android:id="@+id/lv_list"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_marginTop="50dp"

         />

 

</LinearLayout>

list_item_left_menu

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="wrap_content"

    android:background="#000"

    android:gravity="center"

    android:orientation="vertical" >

 

    <TextView

        android:id="@+id/tv_menu"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="TextView" 

        android:drawableLeft="@drawable/btn_arrow_selector"

        android:drawablePadding="3dp"

        android:textColor="@color/text_arrow_selector"

        android:textSize="20sp"

        android:padding="15dp"

        />

 

</LinearLayout>

 

public class LeftMenuFragementextends BaseFragement {

@ViewInject(R.id.lv_list)

private ListViewlvList;

private ArrayList<NewsData>mMenuList;

private int mCurrentPos;

private MenuAdaptermenuAdapter;

@Override

public View initView() {

View view=View.inflate(mActivity, R.layout.fragement_left_menu ,null);

ViewUtils.inject(this,view);

return view;

}

public void setData(ArrayList<NewsData> data){

mMenuList=data;

menuAdapter = new MenuAdapter();

lvList.setAdapter(menuAdapter);

lvList.setOnItemClickListener(new OnItemClickListener() {

 

@Override

public void onItemClick(AdapterView<?> arg0, View arg1,int arg2,

long arg3) {

mCurrentPos=arg2;

menuAdapter.notifyDataSetChanged();

}

});

}

class MenuAdapterextends BaseAdapter{

 

@Override

public int getCount() {

return mMenuList.size();

}

 

@Override

public NewsData getItem(int position) {

return mMenuList.get(position);

}

 

@Override

public long getItemId(int position) {

return position;

}

 

@Override

public View getView(int position, View convertView, ViewGroup parent) {

View view=View.inflate(mActivity, R.layout.list_item_left_menu ,null);

TextView tvMenu=(TextView) view.findViewById(R.id.tv_menu);

NewsData data = getItem(position);

tvMenu.setText(data.title);

if(mCurrentPos==position){

tvMenu.setEnabled(true);

}else

tvMenu.setEnabled(false);

return view;

}

}

}

NewCenterPager类修改

/**

 * 从服务器获取数据

 */

private void getDataFromServer(){

HttpUtils utils=new HttpUtils();

utils.send(HttpMethod.GET, Constants.CATEGORIES_URL,new RequestCallBack<String>() {

@Override

public void onSuccess(ResponseInfo<String> responseInfo) {

String result=responseInfo.result;

processResult(result);

}

 

@Override

public void onFailure(

com.lidroid.xutils.exception.HttpException error, String msg) {

System.out.println(msg);

}

});

}

/**

 * 解析json数据

 */

protected void processResult(String result) {

Gson gson=new Gson();

NewMenuData newsMenuData = gson.fromJson(result, NewMenuData.class);

MainActivity mainUI=(MainActivity)mActivity;

LeftMenuFragement leftMenuFragment = mainUI.getLeftMenuFragment();

leftMenuFragment.setData(newsMenuData.data);

}

MainActivity类添加方法

/**

 * 获取侧边栏对象

 */

public LeftMenuFragement getLeftMenuFragment(){

FragmentManager fm=getSupportFragmentManager();

LeftMenuFragement fragment=(LeftMenuFragement) fm.findFragmentByTag(TAG_LEFT_MENU);

return fragment;

}

效果

 



侧边栏详情页

/**

 * 侧边栏详情页基类

 * @author liangjun

 *

 */

public abstract class BaseMenuDetailPager {

public ActivitymActivity;

public ViewmRootView;

public BaseMenuDetailPager(Activity activity){

mActivity=activity;

mRootView=initView();

}

public abstract View initView() ;

public void initData(){

}

}

public class NewsMenuDetailPagerextends BaseMenuDetailPager{

 

public NewsMenuDetailPager(Activity activity) {

super(activity);

}

 

@Override

public View initView() {

TextView view=new TextView(mActivity);

view.setText("菜单详情-新闻");

view.setTextColor(Color.RED);

view.setTextSize(22);

view.setGravity(Gravity.CENTER);

return view;

}

}

 



LeftMenuFragement类方法添加

public void setData(ArrayList<NewsData> data){

mMenuList=data;

menuAdapter = new MenuAdapter();

lvList.setAdapter(menuAdapter);

lvList.setOnItemClickListener(new OnItemClickListener() {

 

@Override

public void onItemClick(AdapterView<?> arg0, View arg1,int arg2,

long arg3) {

mCurrentPos=arg2;

menuAdapter.notifyDataSetChanged();

setCurrentMenuDetailPager(arg2);

}

});

}

private void setCurrentMenuDetailPager(int arg2) {

MainActivity mainUI=(MainActivity)mActivity;

ContentMenuFragement contentMenuFragement = mainUI.getContentMenuFragement();

NewCenterPager newCenter=contentMenuFragement.getNewsMenuDetail();

newCenter.setCurrentMenuDetailPager(arg2);

}

ContentMenuFragement类添加方法

protected NewCenterPager getNewsMenuDetail(){

NewCenterPager newCenter=(NewCenterPager)mPagers.get(1);

return newCenter;

}

NewCenterPager类修改添加

private ArrayList<BaseMenuDetailPager>menuDetails;

@Override

public void initData() {

tvTitle.setText("新闻中心");

TextView view=new TextView(mActivity);

view.setText("新闻中心");

view.setTextColor(Color.RED);

view.setTextSize(22);

view.setGravity(Gravity.CENTER);

flContent.addView(view);

getDataFromServer();

menuDetails=new ArrayList<BaseMenuDetailPager>();

menuDetails.add(new NewsMenuDetailPager(mActivity));

menuDetails.add(new TopicMenuDetailPager(mActivity));

menuDetails.add(new PhotosMenuDetailPager(mActivity));

menuDetails.add(new InteractMenuDetailPager(mActivity));

}

protected void setCurrentMenuDetailPager(int position) {

BaseMenuDetailPager view=menuDetails.get(position);

flContent.removeAllViews();

flContent.addView(view.initView());

}

 效果

 



页签页面
NewsMenuDetailPager

public class NewsMenuDetailPagerextends BaseMenuDetailPager{

@ViewInject(R.id.vp_news_detail)

private ViewPagermViewPager;

ArrayList<NewsTabData> mTabList;

ArrayList<TabDetailPager> mTabPager;

public NewsMenuDetailPager(Activity activity,ArrayList<NewsTabData> children) {

super(activity);

mTabList=children;

}

 

@Override

public View initView() {

View view=View.inflate(mActivity, R.layout.pager_menu_detail_news,null);

ViewUtils.inject(this,view);

return view;

}

@Override

public void initData() {

mTabPager=new ArrayList<TabDetailPager>();

for (NewsTabData tableData:mTabList) {

TabDetailPager pager=new TabDetailPager(mActivity,tableData);

mTabPager.add(pager);

}

mViewPager.setAdapter(new NewsMenuAdapter());

 

}

class NewsMenuAdapterextends PagerAdapter{

 

@Override

public int getCount() {

return mTabPager.size();

}

 

@Override

public boolean isViewFromObject(View arg0, Object arg1) {

return arg0==arg1;

}

@Override

public Object instantiateItem(ViewGroup container,int position) {

TabDetailPager pager=mTabPager.get(position);

container.addView(pager.mRootView);

pager.initData();

return pager.mRootView;

}

@Override

public void destroyItem(ViewGroup container,int position, Object object) {

container.removeView((View)object);

}

}

}

TabDetailPager

/**

 * 12个页签的页面对象

 * @author Administrator

 *

 */

public class TabDetailPagerextends BaseMenuDetailPager {

 

private NewsTabDatamTableData;

private TextViewmTextView;

public TabDetailPager(Activity activity,NewsTabData tabData) {

super(activity);

mTableData=tabData;

}

 

@Override

public View initView() {

mTextView=new TextView(mActivity);

mTextView.setText("页签");

mTextView.setTextColor(Color.RED);

mTextView.setTextSize(22);

mTextView.setGravity(Gravity.CENTER);

return mTextView;

}

@Override

public void initData() {

mTextView.setText(mTableData.title);

}

}

效果

 



 

Viewpager冲突

public class NoScrollViewPagerextends ViewPager {

 

public NoScrollViewPager(Context context) {

super(context);

}

 

public NoScrollViewPager(Context context, AttributeSet attrs) {

super(context, attrs);

}

//决定事件是否中断

@Override

public boolean onInterceptTouchEvent(MotionEvent arg0) {

return false;//不拦截事件,让嵌套的子viewpager有机会响应触摸事件

}

 @Override

public boolean onTouchEvent(MotionEvent arg0) {

 return true;

}

}

ViewpagerSlidingMenu冲突

public class NewsMenuDetailPagerextends BaseMenuDetailPagerimplements OnPageChangeListener{

@ViewInject(R.id.vp_news_detail)

private ViewPagermViewPager;

ArrayList<NewsTabData> mTabList;

ArrayList<TabDetailPager> mTabPager;

public NewsMenuDetailPager(Activity activity,ArrayList<NewsTabData> children) {

super(activity);

mTabList=children;

}

 

@Override

public View initView() {

View view=View.inflate(mActivity, R.layout.pager_menu_detail_news,null);

ViewUtils.inject(this,view);

return view;

}

@Override

public void initData() {

mTabPager=new ArrayList<TabDetailPager>();

for (NewsTabData tableData:mTabList) {

TabDetailPager pager=new TabDetailPager(mActivity,tableData);

mTabPager.add(pager);

}

mViewPager.setAdapter(new NewsMenuAdapter());

mViewPager.setOnPageChangeListener(this);

}

class NewsMenuAdapterextends PagerAdapter{

 

@Override

public int getCount() {

return mTabPager.size();

}

 

@Override

public boolean isViewFromObject(View arg0, Object arg1) {

return arg0==arg1;

}

@Override

public Object instantiateItem(ViewGroup container,int position) {

TabDetailPager pager=mTabPager.get(position);

container.addView(pager.mRootView);

pager.initData();

return pager.mRootView;

}

@Override

public void destroyItem(ViewGroup container,int position, Object object) {

container.removeView((View)object);

}

}

/**

 * 设置侧边栏可用不可用

 * @param enable

 */

private void setSlidingMenuEnable(boolean enable){

MainActivity mainUI=(MainActivity)mActivity;

SlidingMenu slidingMenu = mainUI.getSlidingMenu();

if(enable){

slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);

}else

//禁用掉侧边栏

slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_NONE);

}

 

@Override

public void onPageScrollStateChanged(int arg0) {

}

 

@Override

public void onPageScrolled(int arg0,float arg1,int arg2) {

}

 

@Override

public void onPageSelected(int arg0) {

if(arg0==0){

//开启侧边栏

setSlidingMenuEnable(true);

}else

setSlidingMenuEnable(false);

//关闭侧边栏

}

}

ViewPagerIndicator框架
问题

 



android-support-v4.jar 

SHA-1: 48c94ae70fa65718b382098237806a5909bb096e

不一致

SlidingMenuLibrary覆盖了ViewPagerIndicator

步骤

1.

 





2.

 



3

 

 



4添加样式

 



5viewpage和指针绑定时,需要将页面切换监听设置给指针

 



SlidingMenu冲突

TabPageIndicator

 //dispatchTouchEvent->interceptTouchEvent->onTouchEvent

    @Override

    public boolean dispatchTouchEvent(MotionEvent ev) {

    //请求父控件及祖宗控件不要拦截当前控件的事件

    getParent().requestDisallowInterceptTouchEvent(true);

    return super.dispatchTouchEvent(ev);

}

跳到下一个页签

pager_menu_detail_news.xml修改

<LinearLayout 

    android:layout_width="match_parent"

    android:layout_height="wrap_content" 

    android:orientation="horizontal" > 

    <com.viewpagerindicator.TabPageIndicator

    android:id="@+id/indicator"

    android:layout_width="0dp"

    android:layout_height="wrap_content"

    android:layout_weight="1"

        />

<ImageView 

    android:id="@+id/iv_next_page"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content" 

    android:src="@drawable/news_cate_arr"

    android:layout_gravity="center"

    android:padding="10dp"

     />

</LinearLayout>

NewsMenuDetailPager

 

@OnClick(R.id.iv_next_page)

public void nextPage(View view){

int currentItem=mViewPager.getCurrentItem();

currentItem++;

mViewPager.setCurrentItem(currentItem);

}

0 0
原创粉丝点击