ActivityGroup,Activity,TabHost注意問題

來源:互聯網
上載者:User

最近項目測試版本終於發布了,記錄一下項目過程中自己關於子Activity,父Activity和Tabhost之間關係的一系列問題:

1、在子Activity中彈出對話方塊的時候,我們需要使用getParent()做為Context(在子Activity在其它一些需要用到Context的時候,都需要使用getParent(),因為子Activity在此時是當作一個視圖添加到父Activity來使用的);

2、在子Activity與子Activity之間進行跳轉,但同時又不需要覆蓋TabHost的TabWidget的時候,我們需要用到下面的代碼:

private void startSubActivity() {Intent intent = new Intent(PollingManagementActivity.this,PollingManagementActivitySub.class);intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);Holder.linearLayout.removeAllViews();View view = getLocalActivityManager().startActivity(PollingManagementActivitySub.class.getSimpleName(), intent).getDecorView();Holder.linearLayout.addView(view);}

注意:當我們第一次點擊TabWeidget進入Activity的時候,我們需要把第一次進入的Activity當作父Activity,然後在onCreate方法裡也用這種方法跳轉到我們需要的Activity中,這樣方便我們在以後各個子Activity跳轉的時候更容易操作...

上面的代碼的一些個小注意問題:

1.1、intent.setFlags設定成國single_top,表示我們在啟動這個Activity之後,在Activity沒有被銷毀的情況下,不會重新建立一個Activity;

1.2、view 我們無論是在子Activity中跳轉還是從父Activity跳轉到子Activity中,我們這裡的view都是父Activity中的view。這個view被當作一個容器添加和刪除各個Activity

子類中跳轉Activity方法:

private void startPollingResultActivity(PollingRequestvo pollingRequestvo,int type) {Intent intent = new Intent(PollingManagementActivitySub.this,PollingResultActivity.class);Bundle bundle = new Bundle();bundle.putSerializable("pollingRequestvo", pollingRequestvo);bundle.putInt("type", type);intent.putExtras(bundle);Holder.viewSwitcher.removeAllViews();View view = ((ActivityGroup) getParent()).getLocalActivityManager().startActivity(PollingResultActivity.class.getSimpleName(),intent).getDecorView();Holder.viewSwitcher.addView(view);currentActivity = false;}

這裡的view實際是我們的父Activity(ActivityGroup)中的容器。

1.3、getLocalActivityManager().startActivity()前面一個參數PollingManagementActivitySub.class也是在非常重要,我在項目開發的時候,被它坑死了 ,它可以隨便設定,但是當我們需要在各個Activity跳轉(跳回來)的時候(並且不要求重新建立新的Activity的時候),這個值必須保證相同,如果要求重新建立Activity,這個值可以不相同。

3、當我們在各個子Activity之間跳轉的時候,希望點擊返回按鈕進行不同的操作,會出現各種出乎意料的操作,我們應該監聽返回按鈕,再進行具體操作,當然監聽返回按鈕不是用onBackPress()方法,而是在父類(即ActivityGroup中)調用dispatchKeyEvent這個方法進行監聽,這樣無論我們在父Activity還是在子Activity中點擊按鍵都會被分發這個按鍵事件,如果這個事件處理完畢返回true:

如下:

@Overridepublic boolean dispatchKeyEvent(KeyEvent event) {if (event.getAction() == event.ACTION_DOWN) {switch (event.getKeyCode()) {case KeyEvent.KEYCODE_BACK:String activityName = getCurrentActivity().getClass().getSimpleName();if (activityName.equals("PollingManagementActivitySub")) {new AlertDialog.Builder(this).setTitle("注意").setMessage("確定要退出手機網管嗎?").setIcon(android.R.drawable.ic_menu_help).setPositiveButton("確定",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog,int which) {dialog.dismiss();finish();}}).setNegativeButton("取消",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog,int which) {dialog.cancel();}}).show();} else if (activityName.equals("PollingResultActivity")) {LinearLayout container = (LinearLayout) findViewById(R.id.viewSwitcher);container.removeAllViews();Intent intent = new Intent(getCurrentActivity(),PollingManagementActivitySub.class);intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);View view = getLocalActivityManager().startActivity(PollingManagementActivitySub.class.getSimpleName(),intent).getDecorView();container.addView(view);}break;}}return true;}

今天又遇到一個糾結的問題ActivityGroup的子Activity跳轉的時候遇到Android2.3.3與Android4.0的不相容的問題,在Android2.3.3中運行好好的,但是到了Android4.0的時候,出現一個子Activity跳轉到另一個Activity的時候,失去焦點的問題。必須在跳轉的時候加上下面的代碼(在ActivityGroup的dispatchKeyEvent方法中):

Holder.linearLayout.setFocusable(true);Holder.linearLayout.setFocusable(true);Holder.linearLayout.requestFocusFromTouch();

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.