Получить данные из результатов поиска (во фрагменте) и обновить (другие) фрагменты в макете вкладки - PullRequest
0 голосов
/ 29 марта 2019

У меня есть 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;
}

Я ожидаю загрузить данные из результатов поиска в соответствующие фрагменты макета вкладки, не перезапуская всю операцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...