2012-11-16 132 views
0

我在 「ActionBarMain.java」 創建以下片段通過標籤不ID

FragMent1 fram1; 

FragmentTransaction fragMentTra = null; 

public void onTabSelected(Tab tab, FragmentTransaction ft) { 

    if (tab.getText().equals("Collection")) { 
     try { 
      rl.removeAllViews(); 
     } catch (Exception e) { 
     } 
     fram1 = new FragMent1(); 
     fragMentTra.addToBackStack(null); 
     fragMentTra = getFragmentManager().beginTransaction().add(rl.getId(), fram1); 
     fragMentTra.commit(); 

}

//And in here I create a new activity 
     Intent intent = new Intent(this, AddBookActivity.class); 
     startActivity(intent); 

刷新片段所以很自然,我應該能夠執行findFragmentByTag(fram1)

現在我在「AddBookActivity」中添加了一個新項目給fram1打印出來的數組列表simple_list_item_1,所以現在我想刷新fram1,我該怎麼做AddB ookActivity?

//AddBookActivity.java 
@Override 
     public boolean onOptionsItemSelected(MenuItem item) { 
      switch (item.getItemId()) { 
      case R.id.addBook: 
       FragmentManager fragmentManager = getFragmentManager(); 
       FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
       Fragment newFragment = new FragMent1(); 
       FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
       //How do I find out the fragment id from findFragmentByTag(fram1)???? 
       transaction.replace(R.id.your_fragment_id, newFragment);//Whats the id, I have the Tag that is fram1 
       transaction.addToBackStack(null); 
       transaction.commit(); 
       return true; 
      case R.id.cancel: 
       super.finish(); 
       return (true); 

      } 

      return (super.onOptionsItemSelected(item)); 
     } 

回答

0

findFragmentByTag需要String作爲參數,而不是一個Fragment

,因此會使用

fragMentTra = getFragmentManager().beginTransaction().add(rl.getId(), fram1, "fram1"); 

添加,並使用

transaction.replace(R.id.your_fragment_id, newFragment, "fram1"); 

找到片段取代,使用

findFragmentByTag("fram1"); 

是否會更新您的列表是另一回事,因爲您發佈的代碼沒有解決該問題。

編輯:

Activity可以加載多個Fragments,因此Activity佈局將取決於屏幕尺寸。最簡單的用法是隻有一個Fragment。這FragmentFragmentList或它包含ListView。該列表需要Adapter將數據綁定到列表。簡單的例子是String類型的ArrayAdapter,例如, ArrayAdapter<String>。您分配ListView以使用ArrayAdapter作爲其數據源。然後,您可以直接更改ArrayAdapter的底層數據(ArrayList<String>String[])(要求向適配器通知更改)或通過適配器本身。通過擴展適配器類可以實現更復雜的視圖。

我建議看看ListViewFragmentList SDK示例。

+0

但是,如何使用「transaction.replace(R.id.your_fragment_id,newFragment,」fram1「);」如果我不知道「your_fragment_id」是什麼? – anders

+0

findFragmentByTag(「fram1」)返回一個片段而不是ID – anders

+0

「your_fragment_id」是現有「片段」或佔位符的ID。你需要閱讀文檔... – techiServices