簡體   English   中英

是否可以創建多個屏幕,而在Android應用程序中只有一個活動?

[英]Is it possible to create multiple screens, with only one Activity in an Android application?

通常,我將使用不同的XML文件為每個要顯示的“屏幕”使用單獨的活動。

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

目前,使用Java反射,我能夠從動態加載的Java文件中返回一個字符串列表,並將每個列表項作為一個單獨的按鈕繪制到屏幕上。 如果單擊這些按鈕之一,我希望能夠在堆棧上加載其他“屏幕”。 因此,當我從這個新屏幕上按回去時,它將轉到上一個調用它的屏幕。

是否可以在不創建新活動並將新意圖傳遞給它的情況下進行此操作,並且當然可以對android清單文件進行相關更改?

以黑莓手機功能為例-安卓中是否有與黑莓手機的推送和彈出屏幕等效的功能? 屏幕在哪里推出/彈出,只會擴展MainScreen嗎?

如果有人有疑問,或者如果我一直含糊,請發表評論,我會盡力向自己解釋,非常感謝您的幫助。

相當於BB的推/彈出屏幕的Android是startActivity() / finish() 但是,您可以通過使用容器視圖(例如ViewSwitcher ,如@hasanghaforian所建議的那樣)或通過在每次要更改屏幕時使用新的視圖層次結構簡單地調用setContentView()來管理單個活動中的視圖。 請注意,當您調用setContentView ,通過調用findViewById獲得的任何視圖引用都將是陳舊的。

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

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

活動獨立於布局,您不為清單中的活動分配布局,而是定義要在活動中使用的布局,請從Activity類調用setContentView()方法來設置布局。

因此,如果要具有某些布局(屏幕),只需要做的就是定義各種布局,並在要調用setContentView(R.layout.the layout)時使用它們,在此調用之后,將顯示所選的布局。

如果無法通過xml靜態創建布局,則可以根據需要根據需要通過代碼動態創建布局。

此外,您可以擁有一堆布局,每次需要一個新屏幕時,都要進行構建,將其推入堆棧並調用setContentView()方法,而在不需要更多屏幕時,彈出堆棧並調用setContentView( ),並在堆棧頂部顯示新布局。

希望對你有幫助

我認為您應該使用Fragment。 我假設您有一些代碼在字符串上進行迭代:

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

在上面的代碼中,只是創建了Framents的集合。 讓我們看一下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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM