使用可变布局ID创建第二个Activity

时间:2013-12-04 01:34:10

标签: android xml listview android-activity

我有两个活动:活动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的行。

2 个答案:

答案 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);
}