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
原创粉丝点击