2014-03-18 98 views
0

我有一個列表視圖Item。在點擊時,我想根據列表視圖中點擊項目的項目位置,使用新的片段替換我的活動中的一個片段。這樣做的方法是什麼?我可以在Item上指定一個意圖,但我不希望開始一項新活動,只需更改當前活動中的片段即可。根據點擊從Listview替換片段

回答

0

您可以通過以下操作實現此目的:

  • 創建您的碎片(取決於不同的項目有多少您的列表)
  • 然後,使用點擊事件,獲取列表的位置item和
  • 從列表中獲取正確的片段並使用片段管理器進行設置。 。

注意 你可以做的是看是否片段可重複使用什麼(取決於你希望用戶看到什麼時,他們從列表中單擊該項目

考慮:

現在
public List<Fragment> fragments = new ArrayList<Fragment>(){{ 

    add(new FragmentA()); 
    add(new FragmentB()); 
    add(new FragmentC()); 
}} 

,你的列表中的onClick方法中:

public void setFragment(Fragment f, String tag){ 
    //do all the necessary steps here to set fragment 
} 

setFragment(fragments.get(position), "frag1"); 

因此,您將根據在列表中點擊哪個項目來設置正確的片段。

我希望這有助於;

注意:也考慮使用接口!

+0

謝謝,你知道這是不是最好的方法是什麼?看起來有點奇怪,必須使用全部的索引列表。如果項目本身有責任知道它是片段,那將會很好。 – stevebot

+0

這是一個很好的觀點。但是,如果您可以提前確定片段將顯示的信息類型,並且您知道列表中的所有項目都是相同的,則可以使用一個片段並避免列表。我不知道有什麼其他方式讓這個列表項負責它自己的片段;你如何將這些信息打包成動態列表? – Eenvincible

+0

下面是另一個建議,可以在沒有片段列表的情況下工作:Inside onClick方法,執行switch語句和case位置,然後實例化每個片段並在break語句之前設置;這樣,你根本不需要一個清單; – Eenvincible

1

如果您使用適配器來顯示列表項目,然後使用標籤來查看項目。

view.setTag(fragmentObject). // each item will hold different fragment 

//當一個項目被點擊時,使用getTag()。

Fragment fragmentObject = (Fragment)view.getTag; 

//然後替換現有的片段。

FragmentTransaction.replace(fragmentObject). 

http://developer.android.com/reference/android/support/v4/app/FragmentTransaction.html

+0

我想我喜歡這種方法,但是是什麼標籤製作的? – stevebot

+0

我主要使用視圖持有者對象的標籤。 – Libin