在标签布局中的活动之间传递额外内容?

时间:2013-08-04 14:00:22

标签: java android eclipse android-intent android-activity

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

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

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

现在这就是它停止的地方。我从来没有在活动之间传递额外的问题。但我以前从未用过标签布局做过。所以我的问题是:如何在相同标签布局下的两个活动之间传递额外的内容?我想这样做,因为我想读取库活动中的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");

这是接近它的正确方法吗?我注意到的一个缺陷是,我将额外的内容作为“字符串数组”,而我有一个普通的ArrayList,而不是字符串arraylist。另外,我怎么测试这是否有效?

1 个答案:

答案 0 :(得分:1)

您可以使用tab活动作为代理在活动之间发送数据。最好实现像

这样的接口
public interface FileNameProvider {
    public onNewFileName(String filename);
}

然后从您的孩子活动开始:

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

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

<强> EDITED

<强> 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);
    }
}