如何在Android中访问另一个模块中的一个模块的视图?

时间:2016-09-10 14:47:26

标签: android android-layout android-library

我的要求是与另一个模块(比如一个库模块)共享一个模块(比如app)的xml视图。我怎么能这样做?

我试过这种方式,但onClickListener按钮无效。我哪里错了?

Intent intent = new Intent(MainActivity.this, LoginActivity.class);
intent.putExtra(Config.LAYOUT_ID, R.layout.login_view);
startActivityForResult(intent, Config.LOGIN_REQUEST);

在login_view.xml中

<Button
android:id="@+id/login_button"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginBottom="4dp"
android:layout_weight="1"
android:tag="login_button"/>

来自不同模块的LoginActivity的onCreate方法

        int layoutId = getIntent().getIntExtra(Config.LAYOUT_ID, 0);
        if (layoutId != 0) {
            setContentView(layoutId);
            View rootView = LayoutInflater.from(getApplicationContext()).inflate(layoutId, null);

         loginButton = (Button)rootView.findViewWithTag("login_button");
         if (loginButton != null) {
            loginButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(LoginActivity.this, "Logging in...", Toast.LENGTH_SHORT).show();
                }
            });
        }

即使控件进入if (loginButton != null)状态,一切都很顺利。但是当点击按钮时,没有任何反应。我哪里错了?或者这种方法有效吗?如果没有,有什么办法吗?

P.S:我也试过通过意图传递按钮id并通过该ID查找视图。同样的结果。

另外请在下面的评论中告诉我下面评论中的原因。这样我就可以知道自己错在哪里了。

1 个答案:

答案 0 :(得分:2)

尝试这个工作

替换

 setContentView(layoutId);

  View rootView = LayoutInflater.from(getApplicationContext()).inflate(layoutId, null);
  setContentView(rootView );

更新这个。

int layoutId = getIntent().getIntExtra(Config.LAYOUT_ID, 0);
        if (layoutId != 0) {

            View rootView = LayoutInflater.from(getApplicationContext()).inflate(layoutId, null);
          setContentView(rootView );
         loginButton = (Button)rootView.findViewWithTag("login_button");
         if (loginButton != null) {
            loginButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(LoginActivity.this, "Logging in...", Toast.LENGTH_SHORT).show();
                }
            });
        }