ViewGroup中添加view

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
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值