Java 在选项卡布局中的活动之间传递额外内容?

Java 在选项卡布局中的活动之间传递额外内容?,java,android,eclipse,android-intent,android-activity,Java,Android,Eclipse,Android Intent,Android Activity,我正在制作一个应用程序,可以录制声音并将其存储在您手机的某个位置。我有一个选项卡布局和该选项卡布局中的两个活动。第一个活动是录制活动,第二个活动是库活动,所有录制的声音都将存储在其中。这就是我想做的 当前应用程序的工作方式:在我完成录制后,会弹出一个带有edittext的对话框,要求用户重命名录制的文件。在用户键入某个名称后,它被添加到ArrayList中,我立即调用putExtra() 现在就到此为止。我从来没有在活动之间传递额外信息的问题。但我以前从未使用过选项卡布局。所以我的问题是:如何在

我正在制作一个应用程序,可以录制声音并将其存储在您手机的某个位置。我有一个选项卡布局和该选项卡布局中的两个活动。第一个活动是录制活动,第二个活动是库活动,所有录制的声音都将存储在其中。这就是我想做的

当前应用程序的工作方式:在我完成录制后,会弹出一个带有edittext的对话框,要求用户重命名录制的文件。在用户键入某个名称后,它被添加到ArrayList中,我立即调用putExtra()

现在就到此为止。我从来没有在活动之间传递额外信息的问题。但我以前从未使用过选项卡布局。所以我的问题是:如何在同一选项卡布局下的两个活动之间传递额外信息?我之所以要这样做,是因为我想在library活动中读取arraylist,以便生成所有录制文件的列表视图

编辑:这是现在的代码:

第一项活动:

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