0

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

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

fileNames = new ArrayList();
fileNames.add(newFileName);
intent.putExtra("fileNames", fileNames);

现在这就是它停止的地方。我从来没有遇到过在活动之间传递额外内容的问题。但我以前从未使用过标签布局。所以我的问题是:如何在同一选项卡布局下的两个活动之间传递额外信息?我想这样做是因为我想读取库活动中的数组列表,以便我可以创建所有记录文件的列表视图。

编辑:这是现在的代码:

第一项活动:

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");

这是处理它的正确方法吗?我注意到的一个缺陷是,我将额外的作为“字符串数组”,而我有一个普通的 ArrayList,而不是字符串数组列表。另外,我如何测试这是否有效?

4

1 回答 1

1

您可以使用选项卡活动作为代理在活动之间发送数据。最好实现一个类似的接口

public interface FileNameProvider {
    public onNewFileName(String filename);
}

然后从您的孩子活动中:

if (getParent() instanceof FileNameProvider)
    ((FileNameProvider) getParent()).onNewFileName(filename);

选项卡活动应该实现此接口,并且在其新方法中它可以切换选项卡(如果需要)并调用其将处理文件名的子活动方法。

已编辑

ActivityOne.java

公共类 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

公共类 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);
    }
}
于 2013-08-04T14:11:58.430 回答