У меня есть Android Activity, которая имеет макет с вкладками (с четырьмя фрагментами), и первый фрагмент имеет функцию поиска, которая ищет данные через бэкэнд-сервис.В случае успеха в получении данных, он должен обновить другие фрагменты соответствующими данными (представления переработчика и представления текста).Но я не могу понять, как обойти эту вещь.Я расскажу, что я сделал до сих пор, дайте мне знать, что я делаю неправильно и как мне прогрессировать.Пример кода более чем приветствуется.
То, что я до сих пор пробовал, находится в моем фрагменте поиска, когда функция поиска получает данные об успехе, она сначала показывает элемент списка из данных профиля пользователя.Когда вы щелкнете по этому элементу, все действия будут перезапущены, и данные будут привязаны ко всем остальным фрагментам.Теперь мне нужно без обновления или перезапуска всей операции, передачи данных в соответствующие фрагменты и обновления представлений.
Сбор активности - это действие держателя для моих четырех фрагментовмакет вкладки
В профиле пользователя / фрагменте поиска
/**this updates the view from customer adapters data passing**/
public static UserProfileFragment newInstance(CustomerDTO commonCustomerDTOList, ArrayList<ContractDTO> commonContractDTOArrayList) {
UserProfileFragment fragment = new UserProfileFragment();
Bundle bundle = new Bundle();
bundle.putSerializable("CUS_DATA", commonCustomerDTOList);
bundle.putSerializable("LOAN_DATA", commonContractDTOArrayList);
fragment.setArguments(bundle);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_user_profile, container, false);
...
if (getArguments() != null) {
CustomerDTO commonCustomerDTOList = (CustomerDTO) getArguments().getSerializable("CUS_DATA");
setCustomerData(commonCustomerDTOList);
NIC_NUMBER = ((CollectionActivity) Objects.requireNonNull(getActivity())).NIC_NUMBER;
sharedPreferences = getActivity().getSharedPreferences(SharedValue.MYSESSION, Context.MODE_PRIVATE);
}
return view;
}
/** set customer data from search result**/
@SuppressLint("SetTextI18n")
private void setCustomerData(CustomerDTO customerDTO) {
if (customerDTO != null) {
tvNic.setText(customerDTO.getNicNumber());
txtFullName.setText(customerDTO.getTitle() + " " + customerDTO.getInitials() + " " + customerDTO.getLastName());
txtMobile.setText(customerDTO.getMobileNo());
tvAddress1.setText(customerDTO.getAddress().split("%")[0] + ",");
tvAddress2.setText(customerDTO.getAddress().split("%")[1] + ",");
tvAddress3.setText(customerDTO.getAddress().split("%")[2] + "");
}
}
@Override
public void onClick(View v) {
int id = v.getId();
switch (id) {
case R.id.btn_search_sUP:
if (AppStatus.getInstance(Objects.requireNonNull(this.getActivity())).isOnline()) {
/**
* Internet is available, Toast It!
*/
if (sSearchCriterion.equals("NIC (NEW/OLD)")) {
if (Validation.isValidNic(editTextSearch.getText().toString().trim().toUpperCase())) {
} else {
editTextSearch.setError("Enter Valid NIC Number");
return;
}
}
showProgress();
SharedPreferences sharedPreferences = this.getActivity().getSharedPreferences(SharedValue.MYSESSION, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(SharedValue.MYSESSION_NIC_NUMBER, editTextSearch.getText().toString().trim().toUpperCase());
editor.putString(SharedValue.MYSESSION_MODULE_CODE, pProductType);
editor.putString(SharedValue.MYSESSION_SEARCH_TYPE, catNormal);
editor.apply();
boolean isLoad = new Handler().postDelayed(() -> {
String SearchMode = "";
int searchCriteriaType = SelectionCriteriaType.getSearchCriteriaType(sSearchCriterion);
if (searchCriteriaType == 1) {
SearchMode = SelectionCriteriaType.getSearchMode(SelectionCriteriaType.NIC);
} else {
SearchMode = SelectionCriteriaType.getSearchMode(SelectionCriteriaType.OTHER);
}
String CustomerCode = editTextSearch.getText().toString().trim().toUpperCase();
if (!CustomerCode.isEmpty()) {
boolean isValidNic = Validation.isValidNic(CustomerCode);
switch (searchCriteriaType) {
case 1:
if (!sSearchCriterion.equals("NIC (NEW/OLD)")) {
isValidNic = true;
getLoanDetails(pProductType, "1", String.valueOf(searchCriteriaType), CustomerCode);
} else {
getLoanDetails(pProductType, catNormal, String.valueOf(searchCriteriaType), CustomerCode);
}
break;
case 2:
isValidNic = true;
getLoanDetails(pProductType, SearchMode, String.valueOf(searchCriteriaType), CustomerCode);
break;
}
if (isValidNic) {
} else {
hideProgress();
editTextSearch.setError("Enter Valid NIC Number");
}
} else {
hideProgress();
}
hideProgress();
this.getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
}, 8000);
} else {
/**
* Internet is NOT available, Toast It!
*/
Toasty.error(this.getActivity(), "Please Connect to Internet!", Toast.LENGTH_SHORT).show();
}
break;
}
}
...
private void getLoanDetails(String moduleCode, String searchMode, String searchType, String searchCode) {
System.out.println("call loan details...");
CommonUtils.hideKeyboardFrom(this.getActivity(), view);
ArrayList<ContractDTO> contractVehicleDTOArrayListClear = new ArrayList<>();
ArrayList<CustomerDTO> customerDTOArrayListClear = new ArrayList<>();
CustomerAdapter customerAdapter = new CustomerAdapter(this.getActivity(), customerDTOArrayListClear, contractVehicleDTOArrayListClear, searchCode, moduleCode);
listViewCustomerList.setAdapter(customerAdapter);
customerAdapter.notifyDataSetChanged();
try {
showProgress();
String param59 = moduleCode + "|" + searchMode + "|" + searchType + "|" + searchCode;
new ISOConverter(new RResponce() {
@Override
public void get61and62Response(String res1, String res2) {
if (res1.trim().isEmpty() || res2.trim().isEmpty()) {
CommonAlert.showAlertFailure(getActivity(), "No Details Found...");
search_result_card.setVisibility(View.GONE);
} else {
CustomerDTO customerDTO = null;
if (sSearchCriterion.equals("BR NUMBER")) {
customerDTO = new CustomerDTO(res1, "");
} else {
customerDTO = new CustomerDTO(res1);
}
ArrayList<ContractDTO> contractDTOArrayList = new ContractDTO().getObjectArrayList(res2);
ArrayList<CustomerDTO> customerDTOArrayList = new ArrayList<>();
customerDTOArrayList.add(customerDTO);
CustomerAdapter customerAdapter = new CustomerAdapter(getActivity(), customerDTOArrayList, contractDTOArrayList, searchCode, pProductType);
listViewCustomerList.post(() -> {
listViewCustomerList.setAdapter(customerAdapter);
customerAdapter.notifyDataSetChanged();
});
if (customerAdapter.getCount() > 0) {
hideProgress();
search_result_card.setVisibility(View.VISIBLE);
setCustomerData(customerDTO);
}
hideProgress();
}
}
@Override
public void get39Response(String responseCode) {
System.out.println(responseCode);
}
@Override
public void get63Response(String error) {
System.out.println(error);
if (!error.trim().isEmpty()) {
new ShowMessageAsync(getActivity(), error, ShowMessageAsync.FAILED).execute();
}
}
}).convertToISO(
this.getActivity(),
MTITransaction.GET_CALL,
MTITransaction.MTI_GET,
ISOProcessCode.TRANS_CODE_LOAN_SEARCH,
"null", param59, "");
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
}
Адаптер клиента
Context mContext;
List<CustomerDTO> customerDTOList;
LayoutInflater inflater;
String NicNumber;
String moduleCode;
ArrayList<ContractDTO> contractDTOArrayList;
UserProfileFragment userProfileFragment;
public CustomerAdapter(Context mContext, List<CustomerDTO> customerDTOList, ArrayList<ContractDTO> contractDTOArrayList, String NicNumber,String moduleCode) {
this.mContext = mContext;
this.customerDTOList = customerDTOList;
this.contractDTOArrayList = contractDTOArrayList;
this.NicNumber = NicNumber;
this.moduleCode = moduleCode;
inflater = LayoutInflater.from(mContext);
}
...
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
...
holder.imageButton.setOnClickListener(v -> {
Intent intent = new Intent(mContext, CollectionActivity.class);
// Intent intent = new Intent("Pass Searched Data");
// Pass all data arrearsList
// intent.setAction("Pass Searched Data");
intent.putExtra(DataparsingValue.VARIABLE_NIC_NUMBER, NicNumber);
intent.putExtra(DataparsingValue.VARIABLE_CUS_DATA, customerDTOList.get(position));
intent.putExtra(DataparsingValue.VARIABLE_LOAN_DATA, contractDTOArrayList);
intent.putExtra(DataparsingValue.MODULE_CODE, moduleCode);
// intent.putExtra(DataparsingValue.VARIABLE_LOAN_WITH_VEHICLE_DATA, contractVehicleDTOArrayList);
// Pass all data flag
// Start SingleItemView Class
mContext.startActivity(intent);
});
return convertView;
}
Фрагмент авансового платежа // обновить представление, используя
public static DownPaymentFragment newInstance(CustomerDTO commonCustomerDTOList, ArrayList<ContractDTO> commonContractDTOArrayList) {
DownPaymentFragment fragment = new DownPaymentFragment();
Bundle bundle = new Bundle();
bundle.putSerializable("CUS_DATA", commonCustomerDTOList);
bundle.putSerializable(DataparsingValue.VARIABLE_LOAN_WITH_VEHICLE_DATA, commonContractDTOArrayList);
fragment.setArguments(bundle);
return fragment;
}
КвитанцииФрагмент // Обновление списка с использованием
public static ReceiptingFragment newInstance(CustomerDTO commonCustomerDTOList, ArrayList<ContractDTO> commonContractDTOArrayList) {
ReceiptingFragment fragment = new ReceiptingFragment();
Bundle bundle = new Bundle();
bundle.putSerializable(DataparsingValue.VARIABLE_CUS_DATA, commonCustomerDTOList);
bundle.putSerializable(DataparsingValue.VARIABLE_LOAN_DATA, commonContractDTOArrayList);
fragment.setArguments(bundle);
return fragment;
}
Я ожидаю загрузить данные из результатов поиска в соответствующие фрагменты макета вкладки, не перезапуская всю операцию.