Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 创建具有可变布局id的第二个活动_Android_Xml_Listview_Android Activity - Fatal编程技术网

Android 创建具有可变布局id的第二个活动

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

我有两个活动:活动A和活动B。活动A由自定义ListView和自定义ListView适配器组成。选择ListView项目时,将显示活动B并显示用户相关信息。按下后退/返回按钮时,活动B调用finish()

我不打算创建与ListView中的项目一样多的活动。我希望活动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()并将参数更改为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);
}

这是解决问题的方法,甚至比我的方法更好。