将值从内部片段传递到外部片段

时间:2014-10-23 10:08:09

标签: android android-fragments

我正在创建一个表单,它是一个活动中的片段(布局)。在表单中,我有输入字段,用于选择日期和时间。我使用datepicker对话框片段填充日期和时间。是一个单独的片段。

http://developer.android.com/guide/topics/ui/controls/pickers.html

我面临的问题是如何从datepicker片段更新我的表单片段中的输入字段。我确实尝试了这种方法,但我得到了空值。

http://developer.android.com/training/basics/fragments/communicating.html

上面的方法也是正确的方法,或者我应该将日期选择器片段作为内部类添加到我的表单片段中,我可能不会在其他地方使用datepicker。

PS:我是一个菜鸟。非常感谢任何帮助。

解决方案

由于我使用的是fragmentpageradapter,在我的内部片段中,我使用此

生成了片段列表
List<fragment> fragmentList = this.getFragmentManager().getFragments();

创建了一个单例类并添加了一个方法     / 获取表单片段 /

 public Fragment getMyEventFragment(List<Fragment> fragmentList){
            Fragment myEventFragment =null;

                for (int i = 0; i < fragmentList.size(); i++) {
                    String currentTag = fragmentList.get(i).getTag();
                    String lastChar = currentTag.substring(currentTag.length() - 1);
                    System.out.println("the lastchar is " + lastChar);
                    if (lastChar.equalsIgnoreCase("1")) {
                        myEventFragment = fragmentList.get(i);
                        break;
                    }
                }

            return myEventFragment;
     }

由于我的表单片段位于我的fragmentpageradapater的第二个标签中,因此值为1,因为自动生成的片段标记中的最后一个元素指的是片段位置。

一旦我获得了我的表单片段,我就可以更新相应的输入字段值。

1 个答案:

答案 0 :(得分:0)

为每个片段设置标签以启用它们

如何设置Fragment TAG,只能在事务处理时将标签添加到片段

// getSupportFragmentManager() if you use support library 
 // tag is optional , but you should assign one to call it again 
getFragmentManager().beginTransaction().add(android.R.id.content, fragment, "your_tag").commit();


   // you can call it any where you want 
    android.app.FragmentManager fragmentManager = getFragmentManager();                
    FirstFragment fragment = (FirstFragment) fragmentManager.findFragmentByTag( "your_tag" );
    // use fragment to do what ever you want 
    fragment.update(string);

其他示例如何确定片段,但这次是通过id

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">
    <fragment class="com.example.android.apis.app.FragmentLayout$TitlesFragment"
            android:id="@+id/titles"
            android:layout_width="match_parent" android:layout_height="match_parent" />
</FrameLayout>
这里的

片段ID是标题 android:id="@+id/titles"

当我想打电话时

TitlesFragment titles= (TitlesFragment)
     getSupportFragmentManager().findFragmentById(R.id.titles);

如果你的片段标识符是XML

,这是有效的