Java 在片段之间解析Recyclerview数据

Java 在片段之间解析Recyclerview数据,java,android,android-fragments,android-recyclerview,Java,Android,Android Fragments,Android Recyclerview,我在片段中有一个recyclerview,其中显示了一个电影列表。我想当用户点击该项目时,它会打开一个新的片段,该片段将是该项目的详细页面 我尝试过bundle和intent putExtra,但不起作用,不断出现空指针错误 我尝试过使用硬编码字符串作为测试,效果很好,但尝试获取项目POJO数据却不行 有人知道如何在recyclerview onclick函数的片段之间解析数据吗 显示recyclerview数据的第一个片段: public class HomeFragment extends

我在片段中有一个recyclerview,其中显示了一个电影列表。我想当用户点击该项目时,它会打开一个新的片段,该片段将是该项目的详细页面

我尝试过bundle和intent putExtra,但不起作用,不断出现空指针错误

我尝试过使用硬编码字符串作为测试,效果很好,但尝试获取项目POJO数据却不行

有人知道如何在recyclerview onclick函数的片段之间解析数据吗

显示recyclerview数据的第一个片段:

public class HomeFragment extends Fragment  {

    private static final String TAG = HomeFragment.class.getSimpleName();

    private RecyclerView mRecyclerView;
    private RecyclerView.LayoutManager mLayoutManager;
    private MovieAdapter mAdapter;
    private List<Movie> movieList;
    private TextView title;

    private final static String API_KEY = "670d03a721dd007862c0181bfd097e5d";

    public HomeFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        initData();
    }



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

        View rootView = inflater.inflate(R.layout.fragment_home, container, false);
        // Inflate the layout for this fragment
        mRecyclerView = (RecyclerView) rootView.findViewById(R.id.movies_recycler_view);
        mLayoutManager = new LinearLayoutManager(getActivity());
        mRecyclerView.setLayoutManager(mLayoutManager);
        mRecyclerView.setAdapter(mAdapter);
        mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(getContext(), new RecyclerItemClickListener.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {


                FragmentTransaction fragTrans = getFragmentManager().beginTransaction();
                MovieDetail movieDetail = new MovieDetail();
                //Bundle Send Data
                Bundle bundle = new Bundle();
                bundle.putString("title", movieList.get(position).getTitle());
                movieDetail.setArguments(bundle);
                fragTrans.replace(R.id.container_body, movieDetail);
                fragTrans.isAddToBackStackAllowed();
                fragTrans.addToBackStack(null);
                fragTrans.commit();



            }
        }));



        return rootView;

    }

    private void initData() {

        ApiInterface api = ApiClient.getClient().create(ApiInterface.class);

        Call<MovieResponse> call = api.getMostPopularMovies(API_KEY);
        call.enqueue(new Callback<MovieResponse>() {
            @Override
            public void onResponse(Call<MovieResponse> call, Response<MovieResponse> response) {

                int statusCode = response.code();
                List<Movie> movies = response.body().getResults();
                mRecyclerView.setAdapter(new MovieAdapter(movies, R.layout.list_item_movie, getContext()));
            }

            @Override
            public void onFailure(Call<MovieResponse> call, Throwable t) {

                Log.d(TAG, t.toString());

            }
        });
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);

    }

    @Override
    public void onDetach() {
        super.onDetach();
    }

}

我看过其他类似的问题,但它们处理的是硬编码字符串,而不是项目单击的POJO数据。您应该创建一个扩展parcelable的类,然后在bundle中传递对象,然后使用get方法访问每个字段。

您有我能看到的示例吗
public class MovieDetail extends Fragment {
    private TextView titleTv;
    public MovieDetail() {
        // Required empty public constructor
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
//        // Inflate the layout for this fragment
       View view = inflater.inflate(R.layout.fragment_movie_detail, container, false);
        titleTv = (TextView) view.findViewById(R.id.detailTitleTV);
        Bundle bundle = getArguments();
        titleTv.setText(String.valueOf(bundle.getString("title")));
        return view;
    }
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
    }
    @Override
    public void onDetach() {
        super.onDetach();
    }
    /**
     * .
     */
}