如何使用片段中的 getSerializableExtra 方法?

我想从片段中获取 getSerializableExtra?我收到“无法解决方法 getIntent()”的错误。请指教


@Nullable

    @Override

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

        View view = inflater.inflate(R.layout.fragment_activity_content, container, false);

        return view;


        ActivityInfo activityInfo =(ActivityInfo)getIntent().getSerializableExtra("name");



    }


桃花长相依
浏览 163回答 3
3回答

慕标琳琳

getIntent 不能直接用于 Fragments,您可以使用它:getActivity().getIntent().getSerializableExtra("your_key")从评论:Unrechable Statement 问题因为您在之后写了,所以在return view;无条件返回语句之后的任何内容都将无法访问。所以在 return 之前使用它,例如:getActivity().getIntent().getSerializableExtra("your_key") return view;注意:虽然此答案可能适用于您的情况,但我建议您使用setArgument其他答案中提到的方法。

牛魔王的故事

在您的片段中使用实例模式class ArgumentsFragment : Fragment() {companion object {    private const val SERIALIZABLE_KEY = "SERIALIZABLE_KEY"    fun instance(data: Serializable) = ArgumentsFragment().apply {        arguments = Bundle().apply { putSerializable(SERIALIZABLE_KEY, data) }    }}override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,                          savedInstanceState: Bundle?): View? {    val serializableData = arguments?.getSerializable(SERIALIZABLE_KEY)    return inflater.inflate(R.layout.activity_base, container)}在您的活动中,只需像这样调用它class ArgumentsActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {    super.onCreate(savedInstanceState)    setContentView(R.layout.activity_base)    supportFragmentManager.beginTransaction().add(ArgumentsFragment            .instance(object : Serializable {}),            ArgumentsFragment.toString()).commit()}无论如何,我会建议你使用 parcelable 而不是可序列化https://developer.android.com/reference/android/os/Parcelable它比 Serializable 更快,并且是使用它的更好实践。

慕森王

我不确定在片段中使用 getIntent().getSerializableExtra("your_key") 是否是一种好习惯。但是您可以使用例如:setArguments() 将数据传递给片段,如下所示public  Fragment newInstance(){        Fragment fragment = new MyFragment();        FragmentManager fm = getSupportFragmentManager();        FragmentTransaction fragmentTransaction = fm.beginTransaction();        fragmentTransaction.replace(containerid, fragment);        Bundle bundle = new Bundle();        bundle.putSerializable("key",myobject);        fragment.setArguments(bundle);        fragmentTransaction.commit();    }而不是覆盖片段类中的 oncreate 以获取序列化对象 @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        if(getArguments()!=null){            object= getArguments().getSerializable("key");        }    }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java