将数据从活动传递到片段nullpointer异常

时间:2014-10-20 21:20:32

标签: android eclipse nullpointerexception fragment

我正在编写这个应用程序,其中String必须从活动传递到片段但我得到nullpointerexception,这是我的代码:

接口:

public interface FragmentCommunicator {

    public void passDataToFragment(String value);

}    

片段代码:

public class YouWinFragment extends Fragment implements FragmentCommunicator {

    TextView score;

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

        return inflater.inflate(R.layout.fragment_youwin, container,false);
    }
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
        score = (TextView) getActivity().findViewById(R.id.score_win);
    }

    @Override
    public void passDataToFragment(String value) {
        // TODO Auto-generated method stub
        score.setText(value);
    }
}

主要活动:

public class MainActivity extends ActionBarActivity{

    Button youWin;  
    String theCounter;
    YouWinFragment youWinFrag;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        youWinFrag=new YouWinFragment();
        setContentView(R.layout.activity_main);

        youWin = (Button) findViewById(R.id.button_youwin);
        youWin.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                FragmentManager fm=getFragmentManager();
                FragmentTransaction ft=fm.beginTransaction();   
                ft.add(R.id.fragment_endgame,youWinFrag );
                ft.commit();

            }
        }); 
        youWinFrag.passDataToFragment("your score is 20");
    }
}

2 个答案:

答案 0 :(得分:2)

  1. 你能发布logcat所以我们知道空指针异常发生在哪里了吗?

  2. 您可以在片段上使用setArgument(Bundle)

  3. 因此,在您的MainActivity中,您将拥有类似的内容:

    Bundle bundle = new Bundle();
    bundle.putString("STRING_KEY", "your score is 20");
    mYouWinFrag = new YouWinFragment();
    mYouWinFrag.setArguments(bundle);
    

    现在在YouWinFragment中,您将拥有:

    String score = getArguments().getString("STRING_KEY");
    // Optionally, you can have a default value by using getArguments().getString("STRING_KEY", "A default value if the key isn't set");
    

答案 1 :(得分:0)

请查看developer.android.com上培训部分的文章。有一篇文章讨论了你要做的事情:

http://developer.android.com/training/basics/fragments/communicating.html

在本文中有一节叫做:

向片段发送消息

本文应该提供您所需要的内容。

另外,你实现的接口是android API的一部分吗?因为我没有看到它。所以,我认为它是你创建的界面。如果是这种情况,您应该阅读上面的整篇文章,以了解片段之间的通信,活动以及活动如何与片段进行通信。

我也没有在Fragment或Activity API中看到方法passDataToFragment。所以,我认为这是你添加的方法。如果是这种情况,则不需要@Override注释,因为类(Activity或Fragment)中没有要覆盖的方法。

我希望这会有所帮助。

道格