android - 我想将数据从活动传递到片段
问题描述
我是 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
解决方案
更新您的 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)
这会成功的。需要帮助请叫我。
推荐阅读
- r - 如何在ggplot2中调整我的箭头方向?
- python - 熊猫矢量化方式产生一组行与所有其他行的成对组合
- java - Java.lang.UnsupportedClassVersionError,在 xampp tomcat 服务器上启动 url 时出现此错误
- python - 错误:sqlalchemy.exc.TimeoutError:QueuePool 限制大小为 5 溢出 10,连接超时,超时 30
- python - 如何从 Tkinter 中的菜单标签中获取文本
- node.js - 在向前移动节点 Js axios 之前等待文件完成管道
- ruby-on-rails - 如何在 Rails 中上传模型中的所有项目?
- discord.js - Discord.js mongoose 注册了 2 个警告而不是 1 个
- macos - 在终端中运行来自身份不明的开发人员的可执行文件
- python - pandas qcut 到新的 bin 和检索 bin 间隔