Starting Activity from Android-Library-Project

前端 未结 2 1495
无人共我
无人共我 2021-01-04 09:58

after a long search I couldn\'t find any appropriate solution. I have a Android-Library Project with nearly all code for the application. From the main activity in the libra

2条回答
  •  栀梦
    栀梦 (楼主)
    2021-01-04 10:12

    When you do this in your library project

     Intent i = new Intent(getApplicationContext(), AndroidActivity.class);
    

    AndroidActivity refers to the library project's AndroidActivity: A project doesn't know about other external projects unless you include them as a library. Just check your imports, you are importing AndroidActivity, and instructing Android to run it.

    Which by the way it's obvious, it would be a bad design pattern if the library project had to know about the derived projects

    An easy solution is to override the activity launching on the derived project, something like this:

    Libary project Activity:

    public void runMyActivity() {
        Intent i = new Intent(getApplicationContext(), AndroidActivity.class);
        // You are on the library project, so you can refer to the activities created in it.
        // the only AndroidActivity known here is the library project's
        .
        .
    }
    

    Your derived project's Activity:

    @Override
    public void runMyActivity() {
        // You are now on the derived project, so you can refer to 
        // the activities created in it, and also to the library project's. You
        // just import the package name of the desired activity or use fully qualified
        // names
    
        Intent i1 = new Intent(getApplicationContext(), AndroidActivity.class);
        // this one will use the activity in the imports
        Intent i2 = new Intent(getApplicationContext(), de.app.libarary.AndroidActivity.class);
        // use the activity from the library project
        Intent i3 = new Intent(getApplicationContext(), de.app.free.AndroidActivity.class);
        // use the activity from the derived project
    
        .
        .
    }
    

    So when you call runMyActivity() from anywhere, it will execute the overriden function ( provided the startup activity extends the library project's activity and overrides that method). And in the overriden function context, AndroidActivity.class will be your derived activity (or the other one, you can import any of them because here you have access to the derived activities AND the library project's).

提交回复
热议问题