我正在编写这个应用程序,其中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");
}
}
答案 0 :(得分:2)
你能发布logcat所以我们知道空指针异常发生在哪里了吗?
您可以在片段上使用setArgument(Bundle)。
因此,在您的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)中没有要覆盖的方法。
我希望这会有所帮助。
道格