将值设置为Fragments中的TextView时出现空指针异常

时间:2015-09-21 05:10:08

标签: android android-fragments textview

我的mainactivity中有两个片段,从第一个开始,用户点击一个按钮并通过我的监听器向第二个片段发送一个char,取决于该char,第二个片段中的textview必须打印一个文本。但在我的方法onActivityCreated中,我的textview始终为null。

这是我的代码: FragmentOne

public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    btnChefcito = (Button)getView().findViewById(R.id.btnChefcito);
    btnChefcita = (Button)getView().findViewById(R.id.btnChefcita);

    btnChefcito.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            welcomeListener.elegirSexo(sexo);
            replaceFragment();
        }
    });

    btnChefcita.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            sexo="f";
            welcomeListener.elegirSexo(sexo);
            replaceFragment();
        }
    });
}

这是我的第二个片段

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    tviBienvenida = (TextView)getView().findViewById(R.id.tviBienvenida);
}



public void getSex(String sex){
    if(sex.equals("m")){
        tviBienvenida.setText(bienvenido);
    }else if(sex.equals("f")){
        tviBienvenida.setText(bienvenida);
    }
}

4 个答案:

答案 0 :(得分:0)

而不是onActivityCreated中的onCreateView执行此操作:

private static View viewHolder;

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    {
        viewHolder = inflater.inflate(R.layout.YourFragmentLayout, container, false);

        btnChefcito = (Button) viewHolder.findViewById(R.id.YourButtonId);

btnChefcito.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            welcomeListener.elegirSexo(sexo);
            replaceFragment();
        }
    });


        return viewHolder;
    }

答案 1 :(得分:0)

在Android上,您必须声明一个全局变量。  你们班级中的tviBienvenida,以及创建视图

tviBienvenida = (TextView)getView().findViewById(R.id.tviBienvenida);

变量tviBienvenida将始终具有该值,并且tviBienvenida中的任何更改也将被视为您的textview。

答案 2 :(得分:0)

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.your_fragment_id, null, false);

     btnChefcito = (Button)view.findViewById(R.id.btnChefcito);
btnChefcita = (Button)view.findViewById(R.id.btnChefcita);

btnChefcito.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        welcomeListener.elegirSexo(sexo);
        replaceFragment();
    }
});

btnChefcita.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        sexo="f";
        welcomeListener.elegirSexo(sexo);
        replaceFragment();
    }
});
    return view;

}

问题是public void onActivityCreated(Bundle savedInstanceState)没有在片段中创建任何视图,所以替换此方法中的所有代码

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState)
抱歉我的英语。

答案 3 :(得分:0)

在onCreateView方法中实现视图并在那里补充您的内容,例如:

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

        View view =  inflater.inflate(R.layout.your_layout, container, false);
        TextView textView = view.findViewById(R.id.yourTextView);

        //your code

        return view;
}