簡體   English   中英

解析片段之間的Recyclerview數據

[英]Parse Recyclerview Data between fragments

我在顯示電影列表的片段中有一個recyclerview。 我想當用戶單擊項目時,它將打開一個新片段,該片段將在該項目的詳細頁面中顯示。

我已經嘗試過捆綁和意圖putExtra,但不起作用,不斷出現空指針錯誤。

我已經嘗試使用Hardcoded字符串作為測試,並且工作正常,但嘗試獲取項目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();
    }

}

詳細片段:

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();
    }
    /**
     * .
     */
}

我看過其他類似的問題,但它們處理的不是項目的POJO數據,而是硬編碼的字符串。 任何幫助表示贊賞

您應該創建一個可擴展的類,然后將對象傳遞到包中,然后使用get方法訪問每個字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM