Android - 如何管理具有不同内容的单个片段的多个实例?

the*_*ser 5 java android android-fragments

我希望能够设置单个片段的视图的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);
    }


}
Run Code Online (Sandbox Code Playgroud)

活动类

    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();
    }
}
Run Code Online (Sandbox Code Playgroud)

framgent.xml很简单; 只是一个TextView.

Dev*_*rim 9

使用名为tag的参数将片段添加到堆栈中.在您的情况下,您已使用"testtag"添加了片段.

fragmentTransaction.add(R.id.test_fragment, fragment, "testtag");
Run Code Online (Sandbox Code Playgroud)

如果您创建同一个片段的多个实例并使用唯一标记添加它们,那么您可以使用该唯一标记获取它们.当您获得片段时,您可以访问其内容.

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

编辑:

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

这个问题有两个部分.

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