如此完全承认,在Android Dev上我有点自学,所以我可能会说这一切都错了。因此,我愿意接受建议!我本质上是在尝试半自动化我目前每天所做的任务。
问题:如何在活动之间传递一个LinearLayout,它的内容是否完整?
所以我有第二个活动,名为reportGeneratorActivity在此活动中,直接在报告预览下有一个线性布局。
线性布局本身在单独的XML文件中定义为previewplate.xml
现在此活动起作用,当您将文本放入上部字段时,它会更新下面的预览。这让我想到了我正在打击的砖墙。目标是获取该预览版并将其添加到我在白色区域中命名为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意图并将意图发送回rootActivity。
在rootActivity中,在onCreate函数中我放置了这段代码:
Bundle previewReceiver = getIntent().getExtras();
//If There is a Bundle, Process it
if(previewReceiver != null) {
newPreview(previewReceiver);
}
此处的目标是获取Intent,然后抓取该包然后将其传递给我的newPreview函数(当前为空),该函数将从report_generator_activity复制完成的预览并以相同的方式在Linear Layout: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文件中定义的。但是,由于我自己的错误,当我清楚地完成这个过程时,什么也没发生。我不确定我错过了什么步骤。
提前致谢!
答案 0 :(得分:0)
如何在活动之间传递一个LinearLayout,它的内容是否完整?
你没有。窗口小部件和容器(即View
的子类)归其活动所有。
我只能假设有一种更简单的方法
只有一项活动,根据需要更改其UI(例如,使用片段并根据需要替换它们)。这些似乎过于紧密耦合,不能成为两个独立的活动。
此处的目标是获取Intent,然后抓取该包然后将其传递给我的newPreview函数(当前为空),该函数将从report_generator_activity复制完成的预览并以相同的方式在Linear Layout:rootWorkinglayout中进行解映。
这种方法没有任何内在错误。你的行为就好像你在实现它时遇到了问题(“我如何以相同的方式解压缩数据”),但是我们没有足够的信息可以为你提供很多建议。通常,Bundle
具有getter方法,用于检索通过setter方法放入Bundle
的值。
答案 1 :(得分:0)
我希望我能清楚地理解你的问题。
在newPreview方法中,首先从Bundle中获取字符串:
public void newPreview(Bundle preview){
String dateHolder = preview.getString("date");
//similarly for other strings
}
然后膨胀LinearLayout并开始设置其元素。
LayoutInflater inflater = (LayoutInflater)context.getSystemService
(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.your_xml, null);
//call findviewbyid on the layout and set its children using the strings you extracted