我的要求是与另一个模块(比如一个库模块)共享一个模块(比如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查找视图。同样的结果。
另外请在下面的评论中告诉我下面评论中的原因。这样我就可以知道自己错在哪里了。
答案 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();
}
});
}