【问题标题】:Send data to multiple fragments using Serialization使用序列化将数据发送到多个片段
【发布时间】:2016-10-03 09:47:15
【问题描述】:

我是新来的,所以请多多包涵。我正在尝试使用 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;
    }
}

【问题讨论】:

    标签: android android-fragments serialization pojo


    【解决方案1】:

    从片段一切换到片段二时必须设置参数

    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);
            }
        });
    

    【讨论】:

    • 感谢您的回复。有什么方法可以让我只在一个地方添加信息并且可以在任何地方获取它? @SaravInfern
    • 嘿,它现在开始工作了。我会接受这个答案。非常感谢。
    猜你喜欢
    • 2016-07-02
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    • 2018-11-30
    • 2021-05-20
    相关资源
    最近更新 更多