java - 在选项卡布局中的 Activity 之间传递额外内容?

标签 java android eclipse android-intent android-activity

我正在制作一个应用程序,可以录制声音并将其存储在您手机上的某个位置。我有一个选项卡布局和此选项卡布局中的两个 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/

相关文章:

java - 如何找到 HashMap 中某些条目的最高值而不是整个 HashMap?

java - 如何在 Java 中逐个元素地比较两个数组?

eclipse - 项目在Eclipse中存储在哪里?

java - 是否可以通过我的 Eclipse 项目一次在表中插入多个列的值?

java - 为什么不可变类需要 final 关键字?

java - 创建可变集合(Map.of 和 List.of)

android - 带有动画更改的自定义进度对话框的大小

android - 以编程方式将自定义 View 添加到 fragment 布局

android - 从 Android 中的 Firebase 子项检索单个值

java - else if 中明显的错误条件,没有给出内部 body 的死代码