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上,实现网页显示
版权声明:本文为qq_20967339原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。