Fadly Dzil
Fadly Dzil

Reputation: 2226

Android Studio, How to change dynamically view in dialog, case: Retrofit onSuccess

By using the retrofit as REST Client,

private void doGetRestBagLotNumber(int bagNumber, String lotNumber, final BagLotNumberRestService callback) {
    Call<BagLotNumberModel> call = bagLotNumberRestService.getAntamBagLotNumber(bagNumber, lotNumber);
    call.enqueue(new Callback<BagLotNumberModel>() {
        @Override
        public void onResponse(Call<BagLotNumberModel> call, Response<BagLotNumberModel> response) {

            if (response.code() == 404 || response.code() == 422) {
                Toast.makeText(getApplicationContext(), response.message(), Toast.LENGTH_SHORT).show();
            } else {
                int id = response.body().getId();
                int bagNumber = response.body().getBagNumber();
                String lotNumber = response.body().getLotNumber();

                // Adding the response to recylerview
                preparedObjectDataBagLotNumber(id, bagNumber, lotNumber);
                callback.onSuccess(response.body() != null);
            }
        }

        @Override
        public void onFailure(Call<BagLotNumberModel> call, Throwable t) {
            Toast.makeText(getApplicationContext(), t.getMessage(), Toast.LENGTH_SHORT).show();
        }
    });

}

I have a method to display a dialog that contains several edit text to input data from the user.

Here's the code.

private void addItemTextMethod() {
    // get prompts.xml view
    LayoutInflater li = LayoutInflater.from(context);
    View promptsView = li.inflate(R.layout.prompts_antam_incoming, null);

    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);

    // set prompts.xml to alertDialog builder
    alertDialogBuilder.setView(promptsView);

    final EditText bagNumber = (EditText) promptsView.findViewById(R.id.editTextDialogAntamBagNumber);
    final EditText lotNumber = (EditText) promptsView.findViewById(R.id.editTextDialogLotNumber);

    // set dialog message
    alertDialogBuilder
            .setCancelable(false)
            .setPositiveButton("Search", null)
            .setNegativeButton("Cancel",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            dialog.cancel();
                        }
                    });

    // create alert dialog
    AlertDialog alertDialog = alertDialogBuilder.create();
    alertDialog.setOnShowListener(new DialogInterface.OnShowListener() {

        @Override
        public void onShow(DialogInterface dialogInterface) {
            Button button = ((AlertDialog) alertDialog).getButton(AlertDialog.BUTTON_POSITIVE);
            button.setOnClickListener(view -> {
                doGetRestBagLotNumber(
                        Integer.parseInt(bagNumber.getText().toString()), lotNumber.getText().toString(),
                        new BagLotNumberRestService() {
                            @Override
                            public void onSuccess(boolean value) {
                                if($value){

                                    // The question is here
                                    // Show Big Thick in center of dialog

                                    // Show bottom option, Close or Adding More

                                    // If user choose Adding More  , display this dialog again
                                }
                            }
                            @Override
                            public Call<BagLotNumberModel> getAntamBagLotNumber(int bagNumber, String lotNumber) {
                                return null;
                            }
                        }

                );
            });
        }
    });
    alertDialog.show();
}

How when the result of the doGetRestBagLotNumber callback is true, the app show option like this:

  1. Show Big Thick in center of dialog as Success message
  2. Show bottom option, Close or Adding More.
  3. If user choose Adding More , display this dialog again

Any help it so appreciated

Upvotes: 0

Views: 342

Answers (1)

Asif Rahman
Asif Rahman

Reputation: 191

Use the instance of your inflated view to change the child views inside it. For example use this inside your onSuccess method:

((ImageView)promptsView.findViewById(R.id.tickIndicationView)).setImageResource(R.drawable.ic_tick);

Upvotes: 1

Related Questions