在活动

时间:2016-05-03 18:24:16

标签: java android android-layout android-studio android-intent

如此完全承认,在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文件中定义的。但是,由于我自己的错误,当我清楚地完成这个过程时,什么也没发生。我不确定我错过了什么步骤。

提前致谢!

2 个答案:

答案 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