【问题标题】:Correct way to Include Main Project in Build Path of library project在库项目的构建路径中包含主项目的正确方法
【发布时间】:2014-09-03 05:27:01
【问题描述】:

我有两个项目,A(主项目)和 B(库项目)。 B 包含在 A 的构建路径中。我必须从 A 的一些活动开始 B 的一些活动。这工作正常,直到最近,我不得不从 B 的活动开始 A 的活动。

为此,我尝试将 A 添加到 B 的构建路径中,但是这样做是在无限循环中运行构建过程。所以,显然,这不是实现我想要的正确方法。

我的问题是,如何从包含在主项目中的库中访问主项目的类?

【问题讨论】:

  • 这里出了点问题。当一个库项目需要访问库中没有的东西时,您应该将其实际放入库项目中,而不是经历所有的麻烦。
  • 好的。那么我想要实现的目标是不可能的?
  • 回答你的问题,有可能。您可以使用反射获取该类并使用它调用startActivity。但是,请注意,您的代码将来很容易中断,因为它仍然可以编译,但只会在运行时抛出错误。

标签: java android eclipse android-activity android-service


【解决方案1】:

尝试将活动.class实例作为参数发送给B。 然后你可以用StartActivity(context , class)开始它。

【讨论】:

  • 不仅有活动,还有其他类。也许可以开始这样的活动,但您的解决方案仅对活动有效。另外,我也想向 A 发送“东西”。发送一种方式是有效的
【解决方案2】:

反思是一种方法,但还不够好。一种可能的方法是将库项目中的活动抽象化:

项目 B 中的活动(图书馆项目)

public abstract class LibraryActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Set up activity
        // Suppose you want to start the activity when a button is clicked
        Button btn = (Button)findViewById(R.id.btn);
        btn.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v) {
                startOtherActivity();
            }
        });
    }

    public abstract void startOtherActivity();
}

在你的主项目中实现抽象函数:

public class LibraryActivityImpl extends LibraryActivity {
    @Override
    public void startOtherActivity() {
        startActivity(new Intent(this, MainProjectActivity.class));
    }
}

现在在您的主项目中,启动 LibraryActivityImpl 而不是 LibraryActivity

这样,您无需担心对库项目未知的类的奇怪访问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 2014-09-09
    • 1970-01-01
    相关资源
    最近更新 更多