簡體   English   中英

將數據從片段傳遞到適配器的問題

[英]Issue to pass data from fragment to adapter

我在將數據從片段傳遞到適配器時遇到問題。

1)我將數據從活動傳遞到片段

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //Set the fragment initially
    UominiEDonne fragment = new UominiEDonne();
    FragmentTransaction fragmentTransaction =getSupportFragmentManager().beginTransaction();
    fragmentTransaction.replace(R.id.fragment_container, fragment);
    fragmentTransaction.commit();

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    Intent intent = getIntent();
    if(intent!=null){
        nome = intent.getStringExtra("nome");
        email = intent.getStringExtra("email");
        uid= intent.getStringExtra("uid");

        UominiEDonne mainFragment = UominiEDonne.newInstance(uid);
    }
}

2)我得到的數據fragment

public static UominiEDonne newInstance(String param1) {
    UominiEDonne fragment = new UominiEDonne();
    Bundle args = new Bundle();
    args.putString("ARG_PARAM1", param1);
    fragment.setArguments(args);
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        mParam1 = getArguments().getString("ARG_PARAM1");
        System.out.println("mParam1"+mParam1);

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


    View rootView = inflater.inflate(R.layout.fragment_main, container, false);


    db = new SQLiteHandler(getActivity());

    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    mSwipeRefreshLayout = (SwipeRefreshLayout)rootView. findViewById(R.id.swipe_container);
    mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            new GetVideos().execute();
        }
    });

    videoList = new ArrayList<>();
    videoList2 = new ArrayList<>();
    System.out.println("ID2:"+idd);

    mAdapter = new VideoAdapter(videoList,videoList2, this,this,mParam1);

    iv=(ImageView) rootView.findViewById(R.id.shareButton2);


    videoRecyclerView = (RecyclerView)rootView. findViewById(R.id.recycler_view);
    videoRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    videoRecyclerView.setHasFixedSize(true);

    videoRecyclerView.setAdapter(mAdapter);
    new GetVideos().execute(part1,part2);
    uiHelper = new UiLifecycleHelper(getActivity(), null);
    uiHelper.onCreate(savedInstanceState);

    // Inflate the layout for this fragment
    return rootView;
}

但是如果我將idd傳遞給adapter構造函數,則在onCreate idd中為null ...我不知道為什么!

這是代碼FRAGMENT

public static UominiEDonne newInstance(String param1) {
    UominiEDonne fragment = new UominiEDonne();
    Bundle args = new Bundle();
    args.putString("ARG_PARAM1", param1);
    fragment.setArguments(args);
    return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        mParam1 = getArguments().getString("ARG_PARAM1");
        System.out.println("mParam1"+mParam1);

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


    View rootView = inflater.inflate(R.layout.fragment_main, container, false);


    db = new SQLiteHandler(getActivity());

    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    mSwipeRefreshLayout = (SwipeRefreshLayout)rootView. findViewById(R.id.swipe_container);
    mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            new GetVideos().execute();
        }
    });

    videoList = new ArrayList<>();
    videoList2 = new ArrayList<>();
    System.out.println("ID2:"+idd);

    mAdapter = new VideoAdapter(videoList,videoList2, this,this,mParam1);

    iv=(ImageView) rootView.findViewById(R.id.shareButton2);


    videoRecyclerView = (RecyclerView)rootView. findViewById(R.id.recycler_view);
    videoRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    videoRecyclerView.setHasFixedSize(true);

    videoRecyclerView.setAdapter(mAdapter);
    new GetVideos().execute(part1,part2);
    uiHelper = new UiLifecycleHelper(getActivity(), null);
    uiHelper.onCreate(savedInstanceState);

    // Inflate the layout for this fragment
    return rootView;
}

您不能像這樣將參數傳遞給片段。 您需要使構造函數為靜態。 檢查下面的代碼;

public class BlankFragment extends Fragment {
    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    // TODO: Rename and change types of parameters
    private String mParam1;
    private String mParam2;



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

    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @param param1 Parameter 1.
     * @param param2 Parameter 2.
     * @return A new instance of fragment BlankFragment.
     */
    // TODO: Rename and change types and number of parameters
    public static BlankFragment newInstance(String param1, String param2) {
        BlankFragment fragment = new BlankFragment();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_blank, container, false);
    }
}

那么您需要使用該構造函數創建片段

BlankFragment fragment = BlankFragment.newInstance("param1","param2");

根據更新的問題進行更新

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    toolbar = (Toolbar) findViewById(R.id.toolbar);
    Intent intent = getIntent();
    if(intent!=null){
        nome = intent.getStringExtra("nome");
        email = intent.getStringExtra("email");
        uid= intent.getStringExtra("uid");
        UominiEDonne mainFragment = UominiEDonne.newInstance(uid);
        FragmentTransaction fragmentTransaction =
        getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.fragment_container, mainFragment);
        fragmentTransaction.commit();
    }
}

暫無
暫無

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

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