java - getArguments() 返回 null

标签 java android arguments bundle

我在使用 fragment 时遇到问题。事实上,我正在尝试将一些参数从我的 Activity 传递给 Fragment。问题是我的 getArguments() 调用总是返回 null。这是我的代码:

相册用户.java :

public class AlbumUser extends AppCompatActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_album_user);

        String albumId = getIntent().getStringExtra("albumId");
        String albumName = getIntent().getStringExtra("albumName");
        String albumAuthor = getIntent().getStringExtra("albumAuthor");
        String coverUrl = getIntent().getStringExtra("coverUrl");

        getFragmentManager().beginTransaction().replace(R.id.fragmentAlbum, Album.newInstance(albumId,albumName,albumAuthor,coverUrl)).commit();

    }
}

相册.java :

public class Album extends Fragment {

    private String albumId;
    private String albumName;
    private String albumAuthor;
    private String coverUrl;

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

        super.onCreateView(inflater, container, savedInstanceState);
        view = inflater.inflate(R.layout.activity_album, container, false);
        Bundle args = getArguments();
        albumId = args.getString("albumId");
        albumName = args.getString("albumName");
        albumAuthor = args.getString("albumAuthor");
        coverUrl = args.getString("coverUrl");
        return view;
    )

    public static Album newInstance(final String albumId, final String albumName, final String albumAuthor, final String coverUrl) {
        final Album album = new Album();
        final Bundle bundle = new Bundle();
        bundle.putString("albumId", albumId);
        bundle.putString("albumName", albumName);
        bundle.putString("albumAuthor", albumAuthor);
        bundle.putString("coverUrl", coverUrl);
        album.setArguments(bundle);
        return album;
    }
}

Activity 相册.xml:

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context=".MainActivity">

    <FrameLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <fragment
            android:id="@+id/fragmentAlbum"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            class="com.example.jeff.facebookphotocast.Album" />

        <include layout="@layout/toolbar"/>

    </FrameLayout>

</android.support.v4.widget.DrawerLayout>

请帮帮我,我快死了^^ 谢谢:)

最佳答案

布局 XML

<fragment
        android:id="@+id/fragmentAlbum"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        class="com.example.jeff.facebookphotocast.Album" />

实例化您的 Album fragment ,不带任何参数。这就是 getArguments() 返回 null 的原因。

如果您想始终为您的 fragment 提供一些参数,请将这部分布局替换为例如一个空的 FrameLayout 容器,并使用 FragmentTransaction#add() 将带有参数的 fragment 放入容器中。

关于java - getArguments() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31168549/

相关文章:

java - 在后台运行 Gradle Java 项目

android - 异步任务 : how to add check on internet connection faults?

node.js - Nodejs将参数传递给fork对象

php - 函数参数 : default value return of a function?

java - 如何获得正确的测试方法语法

java - 使用 Java 解密 OpenSSL PEM 编码的 RSA 私钥?

android - 将 pagingData 3 流与另一个流相结合

C - 如何将字符串作为参数

java - 将复杂集合与 c :foreach in JSP 一起使用

java - 如何在 RecyclerView 中使用 CountDownTimer?