【问题标题】:Replace Fragment based on click from Listview根据来自 Listview 的点击替换 Fragment
【发布时间】:2014-03-18 20:09:47
【问题描述】:

我有一个Item 的列表视图。在单击时,我想根据列表视图中单击项目的项目位置将我的活动中的一个片段替换为一个新片段。这样做的方法是什么?我可以在Item 上指定一个意图,但我不希望开始新的活动,只是更改当前活动中的片段。

【问题讨论】:

    标签: java android listview android-fragments


    【解决方案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

    【讨论】:

    • 我想我喜欢这种方法,但这就是标签的用途吗?
    • 我主要使用视图持有者对象的标签。
    【解决方案2】:

    您可以通过以下方式实现:

    • 创建您的片段(取决于您的列表中有多少不同的项目)
    • 然后,使用点击事件,获取列表项的位置并
    • 从列表中获取正确的片段并使用片段管理器进行设置。

    注意 您可以做的是查看片段是否可以重复使用(取决于您希望用户在单击列表中的该项目时看到的内容。

    考虑:

    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");
    

    因此,您将根据在列表中单击的项目设置正确的片段。

    我希望这会有所帮助;

    注意:也考虑使用接口!

    【讨论】:

    • 谢谢,你知道这是否是最好的方法吗?不得不使用索引列表似乎有点奇怪。如果 Item 本身负责知道它的片段,那就太好了。
    • 这是一个很好的观点。但是,如果您可以提前确定片段将显示什么类型的信息,并且您知道列表中的所有项目都是相同的,那么您可以只使用一个片段并避免列表。我不知道让列表项对其自己的片段负责的任何其他方式;如何将这些信息打包到动态列表中?
    • 这是另一个可以在没有片段列表的情况下工作的建议:在 onClick 方法中,执行 switch 语句和 case 位置,然后实例化每个片段并在 break 语句之前设置;这样一来,您根本不需要列表;
    • 列表项有一个意图,这让我认为他们应该能够知道他们负责哪个片段,因为它有点相似。
    • 为什么列表项有意图?只有当您开始一个新活动或另一个活动开始当前活动时,您才真正需要一个意图。
    猜你喜欢
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    相关资源
    最近更新 更多