Search code examples
androidblackberrydynamicstackscreen

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


Normally I would use a separate activity for each "screen" I wish to display, using different XML files.

However I'm working with Dynamically loading jar files into an android application, so therefore at runtime, I am not aware of how many activities there will be, or how many screens there will be.

At the moment, using java reflection, I am able to return a list of strings from the dynamically loaded java file, and draw each list item, as a separate button onto the screen. If one of these buttons is clicked, i want to be able to load a different "screen" on the stack. So when I press back from this new screen, it goes to the previous screen that called it.

Is it possible to do this without creating a new activity and passing a new intent to it and of course making relevant changes to the android manifest file?

To use blackberry functionality as an example - Is there an equivalent in android to blackberry's push and pop screens? Where the screen ur pushing/popping, would simply extent MainScreen?

If anyone has questions, or If I've been vague, please comment and I will try my best to explain myself, any help is very much appreciated.


Solution

  • In my opinion you should use Fragment. I assume that you have some piece of code where you iterate over the strings:

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

    in above piece of code a collection of Framents is just created. Let's look at the CustomFragment implementation:

    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;
        }
    }
    

    Now in your ListActivity you have to implement on click listener more or less like this like this

    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();
    }