首页 > 解决方案 > 如何在片段中启动 TextView?

问题描述

我是片段的新手,并且有以下代码:

public class TripleTab1 extends Fragment {

private TextView nameAndNumberText;
private Map<String, String> nameToNumberMapping;

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

    nameAndNumberText = (TextView) getActivity().findViewById(R.id.numberToNameView);
    nameToNumberMapping = ContactNameAndNumberUtility
            .getNameToPhoneNumberMapping(getActivity()
            .getApplicationContext());

    for (Map.Entry<String, String> item : nameToNumberMapping.entrySet()) {
        String key = item.getKey();
        String value = item.getValue();

        nameAndNumberText.append(key);
        nameAndNumberText.append(value);
    }
    return inflater.inflate(R.layout.assign_pattern_tab_1, container, false);

}

}

不幸的是,这给了我一个 NullPointerException。似乎 TextView 对象没有启动,尽管我认为它应该是。

“java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'void android.widget.TextView.append(java.lang.CharSequence)'”

有谁知道可能出了什么问题?

标签: javaandroidnullpointerexception

解决方案


用这个替换你的代码

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState){
    View view =inflater.inflate(R.layout.assign_pattern_tab_1, container, false);
    nameAndNumberText = (TextView) view.findViewById(R.id.numberToNameView);
    nameToNumberMapping = ContactNameAndNumberUtility
            .getNameToPhoneNumberMapping(getActivity()
            .getApplicationContext());

    for (Map.Entry<String, String> item : nameToNumberMapping.entrySet()) {
        String key = item.getKey();
        String value = item.getValue();

        nameAndNumberText.append(key);
        nameAndNumberText.append(value);
    }
    return view;

推荐阅读