使用序列化将数据发送到多个片段
Send data to multiple fragments using Serialization
我是新来的,所以请多多包涵。我正在尝试使用 POJO 中的序列化方法将一些数据从 MainActivity 发送到多个片段。在 MainActivity 中,我打开一个新片段 (FragOne) 并且能够获取数据,但是当我从 FragOne 打开一个新片段 (FragTwo) 时,应用程序因 NullPointerException 而崩溃。我搜索了如何使用序列化 POJO 将数据发送到多个片段,但没有结果。所以,如果有人能帮我解决这个问题,我将不胜感激。谢谢
public class FragTwo extends Fragment{
TextView name, position;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragtwo, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
name = (TextView)view.findViewById(R.id.name);
position = (TextView)view.findViewById(R.id.pos);
Spa spa = (Spa)getArguments().getSerializable("spa");
name.setText(spa.getName());
position.setText(spa.getPosition());
}
}
public class FragOne extends Fragment{
TextView name, position;
Button btn;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragone, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
name = (TextView)view.findViewById(R.id.name);
position = (TextView)view.findViewById(R.id.pos);
btn = (Button)view.findViewById(R.id.change);
Spa spa = (Spa)getArguments().getSerializable("spa");
name.setText(spa.getName());
position.setText(spa.getPosition());
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragTwo two = new FragTwo();
((MainActivity)getActivity()).replaceFragment(two);
}
});
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void replaceFragment(Fragment fragment){
FragmentTransaction t = getSupportFragmentManager().beginTransaction();
t.replace(R.id.frame, fragment).addToBackStack(null);
t.commit();
}
public void SerializeMethod(View view){
Spa spa = new Spa();
spa.setName("Ricky");
spa.setPosition("Android Dev");
Bundle mBundle = new Bundle();
mBundle.putSerializable("spa", spa);
FragOne one = new FragOne();
one.setArguments(mBundle);
replaceFragment(one);
}
}
public class Spa implements Serializable{
private String name, position;
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
从片段一切换到片段二时必须设置参数
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bundle mBundle = new Bundle();
mBundle.putSerializable("spa", spa);
FragTwo two = new FragTwo();
two.setArguments(mBundle);
((MainActivity)getActivity()).replaceFragment(two);
}
});
我是新来的,所以请多多包涵。我正在尝试使用 POJO 中的序列化方法将一些数据从 MainActivity 发送到多个片段。在 MainActivity 中,我打开一个新片段 (FragOne) 并且能够获取数据,但是当我从 FragOne 打开一个新片段 (FragTwo) 时,应用程序因 NullPointerException 而崩溃。我搜索了如何使用序列化 POJO 将数据发送到多个片段,但没有结果。所以,如果有人能帮我解决这个问题,我将不胜感激。谢谢
public class FragTwo extends Fragment{
TextView name, position;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragtwo, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
name = (TextView)view.findViewById(R.id.name);
position = (TextView)view.findViewById(R.id.pos);
Spa spa = (Spa)getArguments().getSerializable("spa");
name.setText(spa.getName());
position.setText(spa.getPosition());
}
}
public class FragOne extends Fragment{
TextView name, position;
Button btn;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragone, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
name = (TextView)view.findViewById(R.id.name);
position = (TextView)view.findViewById(R.id.pos);
btn = (Button)view.findViewById(R.id.change);
Spa spa = (Spa)getArguments().getSerializable("spa");
name.setText(spa.getName());
position.setText(spa.getPosition());
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragTwo two = new FragTwo();
((MainActivity)getActivity()).replaceFragment(two);
}
});
}
}
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void replaceFragment(Fragment fragment){
FragmentTransaction t = getSupportFragmentManager().beginTransaction();
t.replace(R.id.frame, fragment).addToBackStack(null);
t.commit();
}
public void SerializeMethod(View view){
Spa spa = new Spa();
spa.setName("Ricky");
spa.setPosition("Android Dev");
Bundle mBundle = new Bundle();
mBundle.putSerializable("spa", spa);
FragOne one = new FragOne();
one.setArguments(mBundle);
replaceFragment(one);
}
}
public class Spa implements Serializable{
private String name, position;
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
从片段一切换到片段二时必须设置参数
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bundle mBundle = new Bundle();
mBundle.putSerializable("spa", spa);
FragTwo two = new FragTwo();
two.setArguments(mBundle);
((MainActivity)getActivity()).replaceFragment(two);
}
});