Java 在选项卡布局中的活动之间传递额外内容?
我正在制作一个应用程序,可以录制声音并将其存储在您手机的某个位置。我有一个选项卡布局和该选项卡布局中的两个活动。第一个活动是录制活动,第二个活动是库活动,所有录制的声音都将存储在其中。这就是我想做的 当前应用程序的工作方式:在我完成录制后,会弹出一个带有edittext的对话框,要求用户重命名录制的文件。在用户键入某个名称后,它被添加到ArrayList中,我立即调用putExtra() 现在就到此为止。我从来没有在活动之间传递额外信息的问题。但我以前从未使用过选项卡布局。所以我的问题是:如何在同一选项卡布局下的两个活动之间传递额外信息?我之所以要这样做,是因为我想在library活动中读取arraylist,以便生成所有录制文件的列表视图 编辑:这是现在的代码: 第一项活动:Java 在选项卡布局中的活动之间传递额外内容?,java,android,eclipse,android-intent,android-activity,Java,Android,Eclipse,Android Intent,Android Activity,我正在制作一个应用程序,可以录制声音并将其存储在您手机的某个位置。我有一个选项卡布局和该选项卡布局中的两个活动。第一个活动是录制活动,第二个活动是库活动,所有录制的声音都将存储在其中。这就是我想做的 当前应用程序的工作方式:在我完成录制后,会弹出一个带有edittext的对话框,要求用户重命名录制的文件。在用户键入某个名称后,它被添加到ArrayList中,我立即调用putExtra() 现在就到此为止。我从来没有在活动之间传递额外信息的问题。但我以前从未使用过选项卡布局。所以我的问题是:如何在
fileNames = new ArrayList();
fileNames.add(newFileName);
getParent().getIntent().putExtra("libraryFileNames", fileNames);
ArrayList fileNames; //creating a global variable for arraylist (outisde of the oncreate
fileNames = getParent().getIntent().getStringArrayListExtra("libraryFileNames");
if (getParent() instanceof FileNameProvider)
((FileNameProvider) getParent()).onNewFileName(filename);
第二项活动:
fileNames = new ArrayList();
fileNames.add(newFileName);
getParent().getIntent().putExtra("libraryFileNames", fileNames);
ArrayList fileNames; //creating a global variable for arraylist (outisde of the oncreate
fileNames = getParent().getIntent().getStringArrayListExtra("libraryFileNames");
if (getParent() instanceof FileNameProvider)
((FileNameProvider) getParent()).onNewFileName(filename);
这是正确的方法吗?我注意到的一个缺陷是,当我有一个普通的ArrayList,而不是一个string ArrayList时,我将额外的作为“string array”。另外,如何测试这是否有效?您可以使用选项卡活动作为代理在活动之间发送数据。最好实现像这样的接口
public interface FileNameProvider {
public onNewFileName(String filename);
}
然后从您的孩子的活动:
fileNames = new ArrayList();
fileNames.add(newFileName);
getParent().getIntent().putExtra("libraryFileNames", fileNames);
ArrayList fileNames; //creating a global variable for arraylist (outisde of the oncreate
fileNames = getParent().getIntent().getStringArrayListExtra("libraryFileNames");
if (getParent() instanceof FileNameProvider)
((FileNameProvider) getParent()).onNewFileName(filename);
tab活动应该实现这个接口,在它的新方法中,它可以切换选项卡(如果需要)并调用它的子活动方法来处理文件名
已编辑
ActivityOne.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);
}
}
公共类活动1扩展活动{
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");
}
}
});
}
public void setFileName(String filename) {
Log.d("2", "Set filename from first activity " + filename);
}
}
ActivityTwo.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);
}
}
公共类活动2扩展活动{
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");
}
}
});
}
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);
}
}
对不起,我还是一个初学者,我接触android/java编程才3个月。你能给我一些关于如何实现这一点的详细信息吗?我已经用一个小例子编辑了我的回复,展示了如何通过父TabActivity调用其他子活动。希望有帮助。
normalarraylist
?你能告诉我们什么是normalarraylist
的定义吗?我就是这样表达的:p