我正在制作一个应用程序,可以录制声音并将其存储在您手机上的某个位置。我有一个选项卡布局和此选项卡布局中的两个 Activity 。第一个 Activity 是录音 Activity ,第二个 Activity 是库 Activity ,其中将存储所有录制的声音。这就是我正在努力做的事情。
应用程序目前的工作原理:录制完成后,会弹出一个包含编辑文本的对话框,要求用户重命名录制的文件。用户输入某个名称后,它被添加到 ArrayList 中,我立即调用了 putExtra()。
fileNames = new ArrayList();
fileNames.add(newFileName);
intent.putExtra("fileNames", fileNames);
现在就到此为止了。我在 Activity 之间传递额外内容从来没有遇到过问题。但我以前从未使用过选项卡布局。所以我的问题是:如何在同一选项卡布局下的两个 Activity 之间传递额外内容?我想这样做是因为我想读取库 Activity 中的数组列表,以便我可以制作所有记录文件的 ListView 。
编辑:这是现在的代码:
第一个 Activity :
fileNames = new ArrayList();
fileNames.add(newFileName);
getParent().getIntent().putExtra("libraryFileNames", fileNames);
第二项 Activity :
ArrayList fileNames; //creating a global variable for arraylist (outisde of the oncreate
fileNames = getParent().getIntent().getStringArrayListExtra("libraryFileNames");
这是处理问题的正确方法吗?我注意到的一个缺陷是,我将额外的内容作为“字符串数组”,而我有一个普通的 ArrayList,而不是字符串数组列表。另外,我如何测试这是否有效?
最佳答案
您可以使用选项卡 Activity 作为代理在 Activity 之间发送数据。最好实现像
这样的接口(interface)public interface FileNameProvider {
public onNewFileName(String filename);
}
然后从您 child 的 Activity 中:
if (getParent() instanceof FileNameProvider)
((FileNameProvider) getParent()).onNewFileName(filename);
选项卡 Activity 应该实现此接口(interface),并且在其新方法中它可以切换选项卡(如果需要)并调用将处理文件名的子 Activity 方法。
已编辑
ActivityOne.java
公共(public)类 ActivityOne 扩展了 Activity {
public interface FileNameProvider {
public void onNewFileName(String filename);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mylayout1);
findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (getParent() instanceof FileNameProvider) {
((FileNameProvider) getParent()).onNewFileName("some file name");
}
}
});
}
}
ActivityTwo.java
公共(public)类 ActivityTwo 扩展了 Activity {
public void setFileName(String filename) {
Log.d("2", "Set filename from first activity " + filename);
}
}
MainActivity.java
public class MainActivity extends TabActivity
implements ActivityOne.FileNameProvider {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getTabHost().addTab(getTabHost().newTabSpec("tab1")
.setContent(new Intent(this, ActivityOne.class)));
getTabHost().addTab(getTabHost().newTabSpec("tab2")
.setContent(new Intent(this, ActivityTwo.class)));
}
@Override
public void onNewFileName(String filename) {
LocalActivityManager activityManager = getLocalActivityManager();
getTabHost().setCurrentTabByTag("tab2");
ActivityTwo two = (ActivityTwo) activityManager.getActivity("tab2");
two.setFileName(filename);
}
}
关于java - 在选项卡布局中的 Activity 之间传递额外内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18043736/