【发布时间】:2016-05-03 18:24:15
【问题描述】:
所以完全承认,当谈到 Android 开发时,我有点自学,所以我可能把这一切都搞错了。因此,我愿意接受建议!我实际上是在尝试将我目前每天执行的任务半自动化。
问题:如何在Activity之间传递一个LinearLayout,它的内容是完整的?
所以我有第二个活动,称为reportGeneratorActivity 在此活动中,报表预览正下方有一个线性布局。
线性布局本身在单独的 XML 文件中定义为 previewplate.xml
现在这个 Activity 起作用了,当你把文本放到上面的字段中时,它会更新下面的预览。这把我带到了我正在撞的砖墙上。目标是获取该预览板并将其添加到我在白色区域中命名为 rootActivity 的主要活动中,该区域本身是一个名为 rootWorkingLayout 的线性布局。
现在文本中的字符串都临时存储在 reportGeneratorActivity 中,此时按下按钮时我正在执行此操作:
public void beginReport (View view) {
//Bundle the Preview
Bundle previewBundle = new Bundle();//Create the Bundle
previewBundle.putString("date", dateHolder);
previewBundle.putString("client", clientNameHolder);
previewBundle.putString("machine", machineTypeHolder);
previewBundle.putString("serial#", serialNumberHolder);
previewBundle.putString("notes", notesHolder);
// Prepare The Intent
Intent previewPasser = new Intent(this, rootActivity.class);
previewPasser.putExtras(previewBundle); // Add the Bundle to Intent
//Send Preview to Root
startActivity(previewPasser);
//Send Preview to History
//Send User to Decision Tree
}
据我了解,我已将所有字符串放入 Bundle previewBundle 中,然后将 bundle 附加到 previewPasser Intent 并将 Intent 发送回 rootActivity。
在 rootActivity 的 onCreate 函数中,我放置了以下代码:
Bundle previewReceiver = getIntent().getExtras();
//If There is a Bundle, Process it
if(previewReceiver != null) {
newPreview(previewReceiver);
}
这里的目标是获取 Intent,然后获取捆绑包,然后将其传递给我的 newPreview 函数(当前为空),该函数将从 report_generator_activity 复制完成的预览,并以相同的方式在线性布局中显示:rootWorkinglayout。
这是我碰壁的最后一步,我只能假设有一种更简单的方法,也许是一种复制布局及其内容并将其发送过来的方法?或者如果我在功能上这样做,我如何以相同的方式解包数据?
由于我是社区的新成员,请原谅我的冗长和缺少图像。
编辑#1: 为了响应 SoroushA 让我走上正确道路的出色回答,我将我的 newPreview 方法调整为:
public void newPreview (Bundle previewReceiver) {
//Extract Strings from Bundle
String date = previewReceiver.getString("date");
String client = previewReceiver.getString("client");
String machine =previewReceiver.getString("machine");
String serialNum = previewReceiver.getString("serial#");
//Create New Inflater
LayoutInflater previewInflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View previewLayout = previewInflater.inflate(R.layout.previewplate, null);
//Add previewLayout to rootWorkingLayout
rootWorkingLayout.addView(previewLayout);
}
目前,我只是想让预览版布局的灰色框出现,因为它的背景是在它自己的 XML 文件中定义的。但是,由于我自己的错误,当我清楚地完成该过程时,什么都没有发生。我不确定我错过了什么步骤。
提前致谢!
【问题讨论】:
-
您应该发送每个容器的值。为了轻松创建自定义视图,以便在两个活动中使用相同的视图。此外,您不应该将大量数据放入捆绑包中。有些手机没有很多内存
标签: java android android-layout android-studio android-intent