从Android电子图书馆项目覆盖活动 [英] Override Activity from Android Library project

查看:154
本文介绍了从Android电子图书馆项目覆盖活动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个Android项目。现在我需要创建项目的第二版。

将有所不同是什么:

该项目的新版本应该有不同内容的活动之一。

我在想创建一个库项目,两个新项目( PROJECT1 项目2 )将使用库项目,但我真的不知道如何设置这个。

如果我只是原来的项目转换成库,然后创建两个新的项目和的又是什么的?如何使 PROJECT1 使用活动1 项目2 使用活性2 在同一个地方?

修改

我已经成立迄今:

MainProject,图书馆有MainActivity.java和ChildActivity.java


AndroidManifest.xml中

 <舱单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    包=com.example.mainproject>
    <应用>
        <活动
            机器人:名称=MainActivity。>
            <意向滤光器>
                <作用机器人:名称=android.intent.action.MAIN/>
                <类机器人:名称=android.intent.category.LAUNCHER/>
            &所述; /意图滤光器>
        < /活性GT;
        <活动
            机器人:名称=ChildActivity。>
        < /活性GT;
    < /用途>
< /舱单>
 

MainActivity.java

 公共类MainActivity延伸活动{

        @覆盖
        公共无效的onCreate(包savedInstanceState){

            ((按钮)findViewById(R.id.button1))。setOnClickListener(新OnClickListener(){

                @覆盖
                公共无效的onClick(视图v){
                    意向意图=新的意图(MainActivity.this,ChildActivity.class);
                    startActivity(意向);
                }
            });
        }
}
 

StandAloneProject:它只有ChildActivity.java


 <舱单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    包=com.example.standaloneproject>
    <应用>
        <活动
             机器人:名称=com.example.mainproject.MainActivity>
            <意向滤光器>
                <作用机器人:名称=android.intent.action.MAIN/>
                <类机器人:名称=android.intent.category.LAUNCHER/>
            &所述; /意图滤光器>
        < /活性GT;
        <活动
            机器人:名称=ChildActivity。>
        < /活性GT;
    < /用途>
< /舱单>
 

我期待什么:

当我启动StandAloneProject,点击按钮,我想ChildActivity从StandAloneProject(而不是从MainProject)的推出。

我所得到的:

当我启动StandAloneProject,我看到MainActivity从MainProject,点击按钮,得到:

  android.content.ActivityNotFoundException:无法找到明确的活动类{com.example.standaloneproject / com.example.mainproject.ChildActivity};有你宣布你的Andr​​oidManifest.xml这个活动?
 

解决方案

现在的问题是你如何开始MainActivity.java的子活动。 你需要手动,确保正确的ChildActivity启动。

要做到这一点的一种方式是明确地设置该组件为意图。该Context.getPackageName()函数返回正在运行的应用程序的软件包名称,你可以用它来识别正确的实例ChildActivity的要启动。在尝试这是你的的onClick()的处理程序MainActivity.java:

 意向意图=新的意图();
    intent.setComponent(新单元名(getPackageName(),getPackageName()+.ChildActivity));
    startActivity(意向);
 

I have an Android project. Now I need to create a second edition of that project.

What will differ:

New edition of the Project should have different content in one of the Activities.

I was thinking about creating a library project and two new projects(project1 and project2) which will use library project, but I don't really understand how to setup this.

Should I just convert the original project into library, then create two new projects and then what? How to make project1 use activity1 and project2 use activity2 in the same place?

EDIT

What I've set up so far:

MainProject, a library has MainActivity.java and ChildActivity.java


AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mainproject">
    <application>
        <activity
            android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".ChildActivity">
        </activity>
    </application>
</manifest>

MainActivity.java

   public class MainActivity extends Activity {

        @Override
        public void onCreate(Bundle savedInstanceState) {

            ((Button)findViewById(R.id.button1)).setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(MainActivity.this, ChildActivity.class);
                    startActivity(intent);
                }
            });
        }
}

StandAloneProject: it has only ChildActivity.java


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.standaloneproject">
    <application>
        <activity
             android:name="com.example.mainproject.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".ChildActivity" >
        </activity>
    </application>
</manifest>

What I expect:

When I launch StandAloneProject and click button, I want ChildActivity from StandAloneProject(not from MainProject) to be launched.

What I get:

When I launch StandAloneProject, I see MainActivity from MainProject, click button and get:

android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.standaloneproject/com.example.mainproject.ChildActivity}; have you declared this activity in your AndroidManifest.xml?

解决方案

The problem is how you start the child activity in MainActivity.java. You need to 'manually' make sure that the correct ChildActivity is started.

One way to do this is to explicitly set the component for the intent. The Context.getPackageName() function returns the package name of the application you are running in and you can use this to identify the 'correct instance' of ChildActivity you want to start. Try this in your onClick() handler in MainActivity.java:

    Intent intent = new Intent();       
    intent.setComponent(new ComponentName(getPackageName(), getPackageName() + ".ChildActivity"));
    startActivity(intent);

这篇关于从Android电子图书馆项目覆盖活动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆