首页 > 解决方案 > 我想将数据从活动传递到片段

问题描述

我是 android 开发的新手 我正在尝试将数据从 Activity 传递到 Fragment 我从另一个 Activity 获得的数据

活动

public class BettingPage extends AppCompatActivity {

    public CardView matchCard;
    ImageView gamebanner;
//    TabLayout tabLayout;
//    ViewPager2 pager2;
//    bettingpage_tabviewer adapter;
    private RecyclerView recyclerView;
    private FirebaseDatabase firebaseDatabase;
    private DatabaseReference databaseReference;
    private MatchAdapter matchAdapter;
    private ArrayList<MatchModel> gList;


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


        String gameid = getIntent().getStringExtra(GAME_ID);
        String banner = getIntent().getStringExtra(BANNER);

//        Bundle bundle = new Bundle();
//        bundle.putString("gameid",gameid);
//        // set Fragmentclass Arguments
//        matchtab fragmentclass = new matchtab();
//        fragmentclass.setArguments(bundle);

        firebaseDatabase = FirebaseDatabase.getInstance();
        databaseReference = firebaseDatabase.getReference("Match").child(gameid);

        gamebanner = findViewById(R.id.gamebanner);
//        tabLayout = findViewById(R.id.bettingtabs);
//        pager2 = findViewById(R.id.bettingpagetab);

//        getIncomingint();

//        matchCard = findViewById(R.id.matchdetail);
        recyclerView = findViewById(R.id.recyclerview);
        gList = new ArrayList<>();

        Glide.with(this).load(banner).into(gamebanner);
//
        databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {

                for (DataSnapshot dataSnapshot : snapshot.getChildren()){
                    MatchModel model = dataSnapshot.getValue(MatchModel.class);
                    gList.add( new MatchModel(model.title,model.amt));

                    Log.i("THE_CURRENT_USER:::", model.toString());
                }
                LinearLayoutManager im = new LinearLayoutManager((BettingPage.this));
                recyclerView.setLayoutManager(im);
                matchAdapter = new MatchAdapter(BettingPage.this,gList);
                recyclerView.setAdapter(matchAdapter);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {
            }
        });

我想将我从另一个活动中获得的 String gameid 传递给片段“--------------------------------- -------------------------------------------------- --------"

分段

public class matchtab 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";

    // Redirect to Bet Confirm page
    
    // TODO: Rename and change types of parameters
    private String mParam1;
    private String mParam2;
    

    RecyclerView matachrecyclerview;

    private MyAdapter adapter;
    private ArrayList<Model> gList;

    
    public matchtab() {
        // 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 matchtab.
     */
    // TODO: Rename and change types and number of parameters
    public static matchtab newInstance(String param1, String param2) {

        matchtab fragment = new matchtab();
        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);
        }
//        Bundle b = getArguments();
//        String gameid = b.getString("gameid");


//        textView.setText(gameid);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        View v = inflater.inflate(R.layout.fragment_matchtab, container, false);


//        String gameid = this.getArguments().getString("gameid");

        // Recycler View
        matachrecyclerview = v.findViewById(R.id.matchrecyclerview);

        gList = new ArrayList<>();
         FirebaseDatabase db = FirebaseDatabase.getInstance();
//        DatabaseReference root = db.getReference("Match").child(gameid);
        DatabaseReference root = db.getReference("Match").child("game1");
        root.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {

                for (DataSnapshot dataSnapshot : snapshot.getChildren()){
                    Model model = dataSnapshot.getValue(Model.class);
                    gList.add( new Model(model.title,model.amt));

                    Log.i("THE_CURRENT_USER:::", model.toString());
                }
                LinearLayoutManager im = new LinearLayoutManager((getContext()));
                matachrecyclerview.setLayoutManager(im);
                adapter = new MyAdapter(getContext(),gList);
                matachrecyclerview.setAdapter(adapter);
            }
            @Override
            public void onCancelled(@NonNull DatabaseError error) {
            }
        });
        return v;}
        
}

告诉我如何发送以及如何从 Activity 接收数据到 Fragment

标签: androidandroid-fragmentsfirebase-realtime-database

解决方案


更新您的 newInstance 方法并使其成为

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

然后将您的 onCreate 更新为

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

    if (getArguments() != null) {
        gameId = getArguments().getString("gameId");
    }

}

现在,当您想在您的BettingPage不这样使用但像这样使用new时创建一个新的 matchtab 片段new matchtab()matchtab.newInstance(gameId)

这会成功的。需要帮助请叫我。


推荐阅读