我有两个活动:活动A和活动B.活动A由自定义ListView和自定义ListView适配器组成。当选择ListView活动B的项目时,会显示用户相关信息。按后退/返回按钮时,活动B调用finish()。
我不打算创建与ListView具有的项目一样多的活动。我希望Activity B能够更改它的布局ID。到目前为止,我的应用程序崩溃了我为转动setContentView方法变量所做的每一次尝试。
活动A的相关代码:
// code
if (position == 0 && imaginaryInt == 3) // item position in the ListView
{
ActivityB b = new ActivityB();
b.setLayoutID(R.layout.main_c); // this line causes the crash
Intent intent = new Intent(view.getContext(),b.getClass());
startActivityForResult(intent, 0);
if (position == 1 && imaginaryInt == 3 ) {...}
活动B:
public class ActivityB extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_b);
}
@Override
public void onBackPressed() {
Intent intent = new Intent();
setResult(RESULT_OK,intent);
super.onBackPressed();
}
}
在ActivityB中覆盖setContentView()并将params更改为R.layout.main_c确实有效! 不幸的是,我没有想法如何设法从ActivityA更改ActivityB的布局。
非常感谢任何帮助。
编辑:---解决方案---
为了能够从ActivityA更改ActivityB的布局,我给每个ListView单击一个静态唯一ID。在ActivityB中,只需使用setContentView方法更改布局,如果单击了具有unqiue id的行。
答案 0 :(得分:0)
您无法在ActivityA的布局中操作ActivityB。 在这一行:
b.setLayoutID(R.layout.main_c);
当你试图打电话时,b不存在。它只会在startActivity之后存在。 即便如此,你记得也不能从活动A中做到这一点 - 活动B与A不同步。 使用其他方法:例如,创建服务以通知ActivityB更改布局。
答案 1 :(得分:0)
您可以通过用于启动活动的Intent
传递所需的信息。例如:
if (position == 0 && imaginaryInt == 3)
{
Intent intent = new Intent(view.getContext(),ActivityB.class);
intent.putExtra("layout_id", R.layout.main_c); // pass the id as an int extra
startActivityForResult(intent, 0);
}
然后,在您的ActivityB类中:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int layoutId = getIntent().getIntExtra("layout_id", R.layout.default_value);
setContentView(layoutId);
}