Android 创建具有可变布局id的第二个活动
我有两个活动:活动A和活动B。活动A由自定义ListView和自定义ListView适配器组成。选择ListView项目时,将显示活动B并显示用户相关信息。按下后退/返回按钮时,活动B调用finish() 我不打算创建与ListView中的项目一样多的活动。我希望活动B能够更改其布局id。到目前为止,我的应用程序在每次尝试打开setContentView方法变量时都会崩溃 活动A中的相关代码:Android 创建具有可变布局id的第二个活动,android,xml,listview,android-activity,Android,Xml,Listview,Android Activity,我有两个活动:活动A和活动B。活动A由自定义ListView和自定义ListView适配器组成。选择ListView项目时,将显示活动B并显示用户相关信息。按下后退/返回按钮时,活动B调用finish() 我不打算创建与ListView中的项目一样多的活动。我希望活动B能够更改其布局id。到目前为止,我的应用程序在每次尝试打开setContentView方法变量时都会崩溃 活动A中的相关代码: // code if (position == 0 && imaginaryInt
// 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()并将参数更改为R.layout.main_c确实有效!
不幸的是,我没有办法从ActivityA更改ActivityB的布局
非常感谢您的帮助
编辑:---解决方案---
为了能够从ActivityA更改ActivityB的布局,我给每个ListView单击一个静态唯一id。在ActivityB中,只要使用setContentView方法更改布局,并且如果单击了具有unqiue id的行。您无法从ActivityA操作ActivityB的布局。 在这一行:
b.setLayoutID(R.layout.main_c);
b在您尝试呼叫时不存在。它只有在星际触觉之后才会存在。
我记得,即使这样,你也不能从活动A中做到这一点——活动B与A不同步。
使用其他方式:例如,创建服务以通知活动B更改布局。您可以通过用于启动活动的
意图
传递所需信息。例如:
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);
}
这是解决问题的方法,甚至比我的方法更好。