6

我希望能够设置单个片段的视图的 setText 和 getText。就像现在一样,当我设置 Framgent 的 TextView 的文本时,它会更改所有片段中该视图的文本。

我一直在尝试移动东西,但这是我目前的代码:

片段类

public class TestFragment extends Fragment{

    View view;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.test_fragment, container, false);
        TextView tv = (TextView) view.findViewById(R.id.huh);
        //tv.setText("AAAAAAAAAAAAAAAAAAA");

        return view;
    }

    public void setText(String asdf) {
        TextView test = (TextView) view.findViewById(R.id.huh);
        test.setText(asdf);
    }


}

活动课

    public class Manage extends BaseActivity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.manage);

        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        TestFragment fragment = new TestFragment();
        //fragment.setText("ASDF");
        fragmentTransaction.add(R.id.test_fragment, fragment, "testtag");
        fragmentTransaction.commit();
    }
}

framgent.xml 非常简单;只是一个文本视图。

4

1 回答 1

9

使用名为 tag 的参数将片段添加到堆栈中。在您的情况下,您已经添加了带有“testtag”的片段。

fragmentTransaction.add(R.id.test_fragment, fragment, "testtag");

如果您创建相同片段的多个实例并使用唯一标签添加它们,那么您可以使用该唯一标签获取它们。当你得到一个片段时,你就可以到达它的内容。

FragmentManager fm = this.getSupportFragmentManager();
Fragment testtagFragment = fm.findFragmentByTag("testtag"); 
View targetView = testtagFragment.getView().findViewById(R.id.anyViewInsideContentOfYourFragment);

编辑:

我希望能够设置单个片段的视图的 setText 和 getText。

这个问题有 2 个部分。

  1. 要在初始化时设置文本,您必须在创建其实例时将初始参数传递给片段。我建议您为此使用静态newInstance方法。在此处查看示例
  2. 要获取文本,请阅读我上面的答案。请注意,您可以在片段的onCreateView方法执行后获取片段的内容。因此,如果您尝试在活动 onCreate 方法中调用片段的 getView 方法(在添加片段之后),那将返回 null。您可以在单击事件下成功获取其内容以进行测试,并对该片段的内容使用任何视图的 get 或 set 操作。
于 2013-11-03T20:30:16.980 回答