Android 将数据从片段发送到另一个片段
我有一个片段,其中我要求用户选择他的团队。它打开另一个片段,用户可以选择他的团队。但我被卡住了,因为无法将团队详细信息发送到上一个片段 用户单击按钮设置主团队,从团队选择片段中选择团队,但我无法将团队详细信息发送到第一个片段 下面是Android 将数据从片段发送到另一个片段,android,android-fragments,Android,Android Fragments,我有一个片段,其中我要求用户选择他的团队。它打开另一个片段,用户可以选择他的团队。但我被卡住了,因为无法将团队详细信息发送到上一个片段 用户单击按钮设置主团队,从团队选择片段中选择团队,但我无法将团队详细信息发送到第一个片段 下面是mathc_片段的代码,用户在其中填写匹配数据: @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup co
mathc_片段
的代码,用户在其中填写匹配数据:
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_create_match, container, false);
Toolbar toolbar = rootView.findViewById(R.id.nav_toolbar);
((PlayerProfileActivity) getActivity()).getSupportActionBar().setTitle("Create Match");
city_name = rootView.findViewById(R.id.cityNameEditText);
ground_name = rootView.findViewById(R.id.groundNameEditText);
setupImageButton(rootView);
setupNumberOfPlayersButton(rootView);
setupHalfTimeButton(rootView);
preferenceConfig = new SharedPreferenceConfig(this.getContext());
requestQueue = Volley.newRequestQueue(getActivity());
Button startMatch = rootView.findViewById(R.id.start_match_bn);
return rootView;
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
rootActivity = (PlayerProfileActivity) context;
} catch (Exception exception) {
rootActivity = null;
}
}
private void setupImageButton(final View rootView) {
//Select Home team
ImageButton homeTeamImageButton = rootView.findViewById(R.id.homeTeamImageButton);
homeTeamImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getChildFragmentManager().beginTransaction().add(R.id.create_match_container,new TeamSelect()).commit();
}
});
//select away team
ImageButton awayTeamImageButton = rootView.findViewById(R.id.awayTeamImageButton);
awayTeamImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getChildFragmentManager().beginTransaction().add(R.id.create_match_container,new TeamSelect()).commit();
}
});
}
这是团队选择片段的代码:
:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment_team_select, container, false);
editText = rootView.findViewById(R.id.team_select_search);
recyclerView = rootView.findViewById(R.id.team_select_recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this.getContext()));
list_items = new ArrayList<>();
teamSelectAdapter = new TeamSelectAdapter(list_items, getContext());
recyclerView.setAdapter(teamSelectAdapter);
teamSelectAdapter.setOnItemClickListener(this);
loadRecyclerViewData();
return rootView;
}
private void loadRecyclerViewData() {
stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
int success = jsonObject.getInt("success");
if(success==1){
JSONArray jsonArray = jsonObject.getJSONArray("Teams");
for (int i=0; i < jsonArray.length(); i++){
JSONObject jsonObject_current = jsonArray.getJSONObject(i);
TeamSelectModelClass teamSelectModelClass = new TeamSelectModelClass(
jsonObject_current.getString("team_id"),
jsonObject_current.getString("team_name"),
jsonObject_current.getString("team_logo_url")
);
list_items.add(teamSelectModelClass);
}
teamSelectAdapter.notifyDataSetChanged();
}else if(success==0){
String message = jsonObject.getString("Message");
Toast.makeText(getContext(),message,Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getContext(), error.getMessage(), Toast.LENGTH_LONG).show();
}
})
};
requestQueue = Volley.newRequestQueue(getContext());
requestQueue.add(stringRequest);
}
@Override
public void onItemClick(int position) {
TeamSelectModelClass clickedItem = list_items.get(position);
String team_id = clickedItem.getTeam_id();
String team_name = clickedItem.getTeam_name();
String team_logo = clickedItem.getTeam_logo_url();
}
@覆盖
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图根视图=充气机。充气(R.layout.fragment\u team\u select,container,false);
editText=rootView.findviewbyd(R.id.team\u select\u search);
recyclerView=rootView.findViewById(R.id.team\u select\u recyclerView);
recyclerView.setHasFixedSize(true);
setLayoutManager(新的LinearLayoutManager(this.getContext());
list_items=new ArrayList();
teamSelectAdapter=新的teamSelectAdapter(列表项,getContext());
recyclerView.setAdapter(teamSelectAdapter);
teamSelectAdapter.setOnItemClickListener(此);
loadRecycleServiceWdata();
返回rootView;
}
私有void loadRecyclerViewData(){
stringRequest=newStringRequest(Request.Method.POST,URL,new Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
试一试{
JSONObject JSONObject=新JSONObject(响应);
int success=jsonObject.getInt(“success”);
如果(成功==1){
JSONArray JSONArray=jsonObject.getJSONArray(“团队”);
for(int i=0;i
在父活动(加载片段的活动)中使用以下方法
并在片段中调用此方法,如下所示
YourFragment yourFragment = new YourFragment ();
final MainActivity mainActivity = (MainActivity) activity;
mainActivity.changeFragment(yourFragment, true);
2解决方案:
-如果您返回到片段(通过创建新片段),请创建一个回调,如
A extends Fragment(){
public A setMethod(X a){
this.a = a;
return this;
}
}
在片段B中调用
new A().setData(yourdata)
第二个解决方案是,您只需将数据添加到SharePreference,然后从另一个片段返回即可获得数据Duplicate:@ADM No bro可能重复,我希望我的第二个片段作为弹出窗口,只需选择一个团队并将值返回到主片段,其他问题与我的不同:/您可以使用接口将值返回到主片段什么是
接口
?我正在从片段中添加片段,因此无法使用此代码此代码用于从片段中添加片段,问题是什么,只需在添加新片段的片段中调用第二个代码
new A().setData(yourdata)