@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
内容的正确方法是什么? 是否有回调方法让我知道它已变得可见?
答案 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;
}