ViewGroup中添加view
来源:互联网 发布:长沙软件行业 编辑:程序博客网 时间:2024/05/18 00:19
1,需求其实很简单就是在一个ViewGroup中添加一个跳转页面,跳转页面就是一个网页
但是基于本身的项目结构,这个跳转页面不管是用Activity、Dialog、Fragment都会出现崩溃。用老大的话就是,本身就是一个ViewGroup,在上面再加一个,退出时就不知道退出哪一个了。这个问题以后在详细研究,为什么会出现这样的问题,先说说这种问题的解决办法。
public class ServicesFragment extends BaseView implements OnClickListener { View view; ImageButton checkOutBtn, cleanBtn, otherBtn, orderFoodBtn, toningBtn; SettingBusiness settingBusiness; CommanBusiness commanBusiness; SongBusiness localSongBusiness; Button wancheng; ImageButton[] btnArray = new ImageButton[5]; private NewSongPlayBusiness songPlayBusiness;// Context context; private Dialog dialog;// final Context context = getActivity(); Listener listener; /** * 点餐的跳转监听 * @author xupeng * */ public interface Listener{ void onFoodClick(); } public void setListener(Listener listener) { this.listener = listener; } public ServicesFragment(Context context) { super(context); commanBusiness = RemoteBusinessFactory.instance().getCommanBusiness(context); songPlayBusiness = NetWorkBusinessFactory.instance().getNewSongPlayBusiness(context); } @Override public View getView() { view = LayoutInflater.from(context).inflate(R.layout.services_fragment, null); initButton(); return view; } public void initButton() { checkOutBtn = (ImageButton) view.findViewById(R.id.checkOutBtn); cleanBtn = (ImageButton) view.findViewById(R.id.cleanBtn); otherBtn = (ImageButton) view.findViewById(R.id.otherBtn); orderFoodBtn = (ImageButton) view.findViewById(R.id.orderFoodBtn); toningBtn = (ImageButton) view.findViewById(R.id.toningBtn); wancheng = (Button) view.findViewById(R.id.server_wc); wancheng.setOnClickListener(this); checkOutBtn.setOnClickListener(this); cleanBtn.setOnClickListener(this); otherBtn.setOnClickListener(this); orderFoodBtn.setOnClickListener(this); toningBtn.setOnClickListener(this); btnArray[0] = checkOutBtn; btnArray[1] = cleanBtn; btnArray[2] = otherBtn; btnArray[3] = orderFoodBtn; btnArray[4] = toningBtn; } RoomService roomservice; int result = 9; @Override public void onClick(View v) { switch (v.getId()) { case R.id.checkOutBtn: commanBusiness.setRoomService(0); break; case R.id.cleanBtn: commanBusiness.setRoomService(1); break; case R.id.orderFoodBtn: /** * 回调监听 */ if(listener != null ){ listener.onFoodClick(); } break; case R.id.toningBtn: commanBusiness.setRoomService(3); break; case R.id.otherBtn: commanBusiness.setRoomService(4); break; case R.id.server_wc: commanBusiness.setRoomService(5); break; default: break; } } @Override public int getPageId() { // TODO Auto-generated method stub return 0; }}
上段代码只是在主Activity的一个子view,里面设置布局和监听回调
2,新建一个ServicesViewGroup,实现具体业务
public class ServicesViewGroup extends ViewGroup implements Listener, com.audiocn.kalaok.services.FoodWeb.Listener { ServicesFragment servicesFragment; NewSongPlayBusiness songPlayBusiness; FoodWeb foodWeb; public ServicesViewGroup(Context context) { super(context); songPlayBusiness = NetWorkBusinessFactory.instance().getNewSongPlayBusiness(context); /** * 这里引用servicesFragment,实例一下,并设置监听 */ servicesFragment = new ServicesFragment(context); servicesFragment.setListener(this); showView(servicesFragment, "services"); } @Override public void onCreate() { super.onCreate(); } @Override public int getPageId() { return CommanBusiness.PAGE.SERVICES.ordinal(); } @Override public void onResume() { // TODO Auto-generated method stub super.onResume(); // showView(servicesFragment, "services"); } /** * 返回监听 */ @Override public void onBackPressed() { showView(servicesFragment, "services"); } /** * 实现点击事件 */ @Override public void onFoodClick() { songPlayBusiness.getOrderUrl(new BusinessCallBack<FoodModel>() { @Override public void onResult(Result<FoodModel> t) { String foodUrl = t.t.url; Log.e("xyz", "foode===" + t.t.url); if (foodWeb == null) { foodWeb = new FoodWeb(context); foodWeb.setListener(ServicesViewGroup.this); } showView(foodWeb, "foot"); foodWeb.loadUrl(foodUrl); } }, true); }}
继承于viewgroup,作为一个容器,把具体的view添加进去。
3,跳转页也就是view页
public class FoodWeb extends BaseView { private Button botton; private WebView webView; PlayControlBusiness localPlayControl; Listener listener; public void setListener(Listener listener) { this.listener = listener; } public FoodWeb(Context context) { super(context); localPlayControl = LocalBusinessFactory.instance().getPlayControlBusiness(context); } @Override public int getPageId() { // TODO Auto-generated method stub return -1; } @Override public View getView() { view = LayoutInflater.from(context).inflate(R.layout.food_web,null); initView(); return view; } public interface Listener{ void onBackPressed(); } private void initView(){ webView = (WebView) view.findViewById(R.id.webView); botton = (Button) view.findViewById(R.id.back); botton.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { if(listener != null){ listener.onBackPressed(); } } }); } public void loadUrl(String url){ webView.loadUrl(url); }}
这里再稍微说下传值的问题
1,调用方法
/** * 实现点击事件 */ @Override public void onFoodClick() { songPlayBusiness.getOrderUrl(new BusinessCallBack<FoodModel>() { @Override public void onResult(Result<FoodModel> t) { String foodUrl = t.t.url; Log.e("xyz", "foode===" + t.t.url); if (foodWeb == null) { foodWeb = new FoodWeb(context); foodWeb.setListener(ServicesViewGroup.this); } showView(foodWeb, "foot"); /** * 调用loadUrl()方法,已在webGroup传值 */ foodWeb.loadUrl(foodUrl); } }, true); }
2,传值并实现功能,
/** * 传值url,也就是打开的网页地址 * @param url */ public void loadUrl(String url){ webView.loadUrl(url); }
其实就是关注两个问题:
1,怎么把view加入到viewgroup中
2,怎么把在viewGroup获取的值传到view上,实现网页显示
0 0
- ViewGroup中添加view
- viewgroup中删除和添加子view
- viewgroup中删除和添加子view
- 在一个ViewGroup中添加子view
- ViewGroup中添加子View时附带动画效果
- 自定义View添加到Viewgroup中layoutparams为空的记录
- Android中View和ViewGroup介绍
- Android中View和ViewGroup介绍
- Android中View和ViewGroup介绍
- android中自定义View及ViewGroup 学习心得
- Android中View和ViewGroup介绍
- Android中View和ViewGroup介绍
- Android中View和ViewGroup介绍
- Android中自定义View、ViewGroup理论基础详解
- Android中View和ViewGroup介绍
- Android中View和ViewGroup介绍
- Android中View和ViewGroup介绍
- Android中view和viewGroup的区别
- Android中Java和JavaScript交互代码示例3以及常见问题
- Unity3d中物体的的碰撞检测
- 老树新芽,在ES6下使用Express
- 微信公众号支付出错: 当前页面的URL未注册: get_brand_wcpay_request:fail
- 什么是好的算法?
- ViewGroup中添加view
- 常见字符串类型题
- 自定义控件--快速检索
- 记一次存储过程学习及存其常用函数
- Permutations
- C#获取网页内容的三种方式
- NoSQL数据库----MongDB数据库
- TYZ 8/23 道路覆盖
- 水晶字体——老九门(做的有些失败,以后还要多练)