2012-09-03 58 views
0

正常情況下,我會爲每個希望顯示的「屏幕」使用不同的XML文件使用單獨的活動。是否有可能創建多個屏幕,只有一個Android應用程序中的Activity?

但是我正在將動態加載的jar文件加載到android應用程序中,所以在運行時我不知道會有多少活動,或者有多少個屏幕。

目前,使用java反射,我可以從動態加載的java文件中返回一個字符串列表,並將每個列表項作爲一個單獨的按鈕繪製到屏幕上。如果其中一個按鈕被點擊,我希望能夠在堆棧上加載不同的「屏幕」。所以當我從這個新屏幕按下時,它會轉到前一個屏幕上調用它。

有沒有可能做到這一點,而不創建一個新的活動,並傳遞一個新的意圖,並當然對Android清單文件進行相關的更改?

以黑莓手機功能爲例 - 在黑莓手機的推送和彈出屏幕中是否有與Android相同的功能?在哪裏你推/彈出屏幕,只會擴展MainScreen?

如果有人有問題,或者如果我一直模糊,請評論,我會盡我所能解釋我自己,任何幫助,非常感激。

+2

是的,這是可能的,你需要使用的片段,HTTPS: //developer.android.com/guide/components/fragments.html –

+0

「我正在將動態加載的jar文件加載到android應用程序中」 - 爲什麼? – CommonsWare

+0

那麼我有多個單獨的模塊,我想動態加載到我的「主Android應用程序」。每個模塊只能根據一組權限進行訪問。如果登錄的用戶具有查看1,2,3,4,5模塊1,2,3所需的權限 - 那麼只有模塊1,2,3將被動態加載。 我想這樣做的原因是隻加載需要的模塊而不做更多的工作。主要的Android應用程序只是負責包含這些模塊。我希望包含模塊的動態加載的jar可以是一個活動。 – ryvianstyron

回答

0

在我看來你應該使用Fragment。我假設你有一段代碼,你遍歷字符串:在上面這段的Framents的集合剛剛創建的代碼

for(String def : definitions) { 
    Fragment f = new CustomFragment(); 
    Bundle b = new Bundle(); 
    b.putString("STRING_DEF",def); 
    f.setArguments(b); 
    fragments.add(f); 
} 

。讓我們來看看CustomFragment實現:

CustomFragment extends Fragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     String def = getArguments.getString("STRING_DEF"); 
     //write code to create view 
     return view; 
    } 
} 

現在您的ListActivity你有點擊監聽器來實現更多或更少的這樣的類似這樣的

public void onListItemClick(ListView l, View v, int position, long id) { 
    FragmentManager fragMgr = getFragmentManager(); 
    FragmentTransaction t = fragMgr.beginTransaction(); 
    t.replace(R.id.id_of_view_place_holder_for_fragment, 
     fragments.get(position),"FRAGMENT_TAG"); 
    t.commit(); 
} 
0

您可以使用ViewSwitcher。 ViewSwitcher是一個ViewAnimator,在兩個視圖之間切換,並且有一個從中創建這些視圖的工廠。您可以使用工廠創建視圖,或者自己添加它們。一個ViewSwitcher只能有兩個子視圖,其中一個只顯示一個子視圖。或者您可以使用fragments

3

與BB的推/拉屏幕相當的Android是startActivity()/finish()。但是,您可以通過使用容器視圖(如ViewSwitcher,如@hasanghaforian建議)在單個活動中管理自己的視圖,或者只要您想更改屏幕,只需使用新的視圖層次調用setContentView()即可管理自己的視圖。請注意,當您致電setContentView時,通過調用findViewById獲得的任何視圖引用都將陳舊。

0

如果您參考是否可以在同一活動中使用不同佈局,答案是肯定的。

活動與佈局無關,您不需要爲清單中的活動分配佈局,您可以在Activity中調用setContentView()方法來設置佈局,從而定義要使用的佈局。

所以如果你想有一些佈局(屏幕),你必須做的唯一事情就是定義各種佈局,並在你想調用setContentView(R.layout.the佈局)時使用它們,在這個調用之後,選擇佈局將被顯示。

如果您無法通過xml靜態創建佈局,則可以根據需要按照需要在每次需要時按照代碼創建該佈局。

另外你可以有一堆佈局,每次你需要一個新的屏幕,建立它,把它推到堆棧並調用setContentView()方法,當你不需要它時,彈出堆棧並使用堆棧頂部的新佈局調用setContentView()。

希望它能幫到你

相關問題