0

音声を録音してスマートフォンのどこかに保存するアプリを作成しています。このタブ レイアウトには、タブ レイアウトと 2 つのアクティビティがあります。最初のアクティビティは録音アクティビティで、2 つ目はライブラリ アクティビティで、録音されたすべてのサウンドが保存されます。これが私がやろうとしていることです。

現時点でのアプリの動作: 記録が完了すると、編集テキストを含むダイアログがポップアップし、記録されたファイルの名前を変更するようユーザーに求めます。ユーザーが特定の名前を入力すると、それが ArrayList に追加されます。私は即座に putExtra() を呼び出しました。

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

ここで停止します。アクティビティ間でエキストラを渡すことに問題はありませんでした。しかし、私は以前にタブレイアウトでそれをやったことがありません. 私の質問は、同じタブ レイアウトにある 2 つのアクティビティ間で余分なものを渡すにはどうすればよいですか? これを行うのは、ライブラリ アクティビティで arraylist を読み取り、記録されたすべてのファイルのリストビューを作成できるようにするためです。

編集:これは今のコードです:

最初のアクティビティ:

fileNames = new ArrayList();
fileNames.add(newFileName);
getParent().getIntent().putExtra("libraryFileNames", fileNames);

2 番目のアクティビティ:

ArrayList fileNames; //creating a global variable for arraylist (outisde of the oncreate
fileNames = getParent().getIntent().getStringArrayListExtra("libraryFileNames");

これはそれにアプローチする正しい方法ですか?私が気づいた 1 つの欠点は、文字列配列リストではなく通常の ArrayList を持っているのに、余分なものを「文字列配列」として取っていることです。また、これが機能するかどうかをどのようにテストできますか?

4

1 に答える 1

1

タブ アクティビティをプロキシとして使用して、アクティビティ間でデータを送信できます。次のようなインターフェースを実装することをお勧めします

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

次に、子アクティビティから:

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

タブ アクティビティはこのインターフェイスを実装する必要があり、新しいメソッドでタブを切り替え (必要な場合)、ファイル名を処理する子アクティビティ メソッドを呼び出すことができます。

編集済み

ActivityOne.java

public class ActivityOne extends 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 class ActivityTwo extends 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 に答える