在ViewPager中更改片段的文本

时间:2014-03-01 08:05:09

标签: java android android-fragments

@Override
public Fragment getItem(int position) {
    CharacterFragment fragment = new CharacterFragment();
    View rootView = fragment.getView();
    TextView character = (TextView) rootView.findViewById(R.id.character);
    character.setText(name[position]);
    return fragment;
}  

这是我在ViewPager中更改片段的代码。片段只有一个文本视图。基本上,我只是在我的名字中填写字母表。因此,根据索引,我必须在片段的TextView中设置文本。

使用上面的代码,程序会以NullPointerException打击,因为布局还没有膨胀,所以我认为。

更改Fragment内容的正确方法是什么? 是否有回调方法让我知道它已变得可见?

2 个答案:

答案 0 :(得分:2)

没有回调。您可以在创建片段时将文本作为参数发送到片段,并在片段内部设置文本。

类似的东西:

@Override
public Fragment getItem(int position) {
    CharacterFragment fragment = CharacterFragment.newInstance(name[position]);
    View rootView = fragment.getView();
    return fragment;
}

您的CharacterFragment.newInstance(String name)方法如下:

public static CharacterFragment.newInstance(String name) {
    CharacterFragment fragment = new CharacterFragment();
    Bundle args = new Bundle();
    args.put("NAME_ARG", name);
    fragment.setArguments(args);
    return fragment;
}

然后在onCreateView()中,您通过getArguments()方法获得参数,并获得密钥为NAME_ARG的字符串。你有它!有意义吗?

答案 1 :(得分:1)

这不是使用getView()的正确方法。实现你想要的方式有点不同。为此,您应该将字符串(在本例中为name[position])传递给方法。 但你应该记住片段不应该用它们的构造函数实例化,而是创建一个静态方法,我会告诉你:

@Override
public Fragment getItem(int position) {
    CharacterFragment fragment = CharacterFragment.newInstance(name[position]);
    return fragment;
}  

然后,在CharacterFragment.java

public static CharacterFragment newInstance(String name) {
    Bundle bundle = new Bundle();
    bundle.putString("key_name",name);

    CharacterFragment fragment = new CharacterFragment();
    CharacterFragment.setsetArguments(bundle);

    return fragment;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

     View view = inflater.inflate(R.layout.fragment_xml_file, container, false);

     // AND HERE WE GO
     String name = getArguments().getString("key_name");
     TextView character= view.findViewById(R.id.character);
     character.setText(name);

     return view;
}