2014-03-18 62 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