2013-08-04 32 views
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,而不是一個字符串arraylist。另外,我怎麼能測試這是否有效?

+0

'正常ArrayList'?你能告訴我們什麼是「正常的ArrayList」的定義嗎? –

+0

這就是我所表達的意思:p – Pizzret

回答

1

您可以使用選項卡活動作爲代理在活動之間發送數據。這是更好的辦法來實現像

public interface FileNameProvider { 
    public onNewFileName(String filename); 
} 
從你的孩子的活動

那麼inteface:

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

的標籤活動應該實現這個接口,並在其新的方法,它可以切換選項卡(如果需要)和調用將要處理文件名的子活動方法。

EDITED

ActivityOne.java

公共類ActivityOne延伸活動{

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延伸活動{

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); 
    } 
} 
+0

對不起,但我仍然是一個初學者,現在我已經進入android/java編程大約3個月。你能否詳細說明我如何實現這一目標? – Pizzret

+1

我用一個小例子編輯了我的回覆,顯示瞭如何通過父級TabActivity調用其他子級活動。希望能幫助到你。 – sashomasho

+0

謝謝!你的代碼完美無瑕 – Pizzret