0

在我的应用程序中,我应该使用Material Stepper,为此,我想使用这个https ://github.com/ernestoyaquello/VerticalStepperForm

但我想从服务器动态添加它。
为了与服务器连接,我使用了Retrofit库,我应该检查服务器中的项目类型。

当此类型为“便士”时,显示其中一个步骤,当类型为“最佳”时,显示另一个步骤。

我从库教程中创建了这个步骤,但是我想当类型是penny时给我看 StepDynamicTxt,而当类型最好时给我看 StepDynamicEdt

我写了下面的代码,但只添加了每个步骤中的一个项目!
但在 API 中,我有 2 项便士类型和 3 项最佳类型!

应该给我看 5 步,但给我看 2 步!

我的代码:

public class StepperActivity extends AppCompatActivity {

    private ApiServices apiServices;
    private ProgressBar loader;
    private VerticalStepperFormView stepper;

    private StepDynamicEdt stepDynamicEdt;
    private StepDynamicTxt stepDynamicTxt;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bidzila_stepper);
        //Initialize
        apiServices = ApiClient.ApiClient().create(ApiServices.class);
        loader = findViewById(R.id.bidStepper_loader);
        stepper = findViewById(R.id.bidStepper);

        //Api
        callAPi();
    }

    private void callAPi() {
        loader.setVisibility(View.VISIBLE);
        Call<TodayResponse> call = apiServices.TODAY_RESPONSE_CALL(5);
        call.enqueue(new Callback<TodayResponse>() {
            @Override
            public void onResponse(Call<TodayResponse> call, Response<TodayResponse> response) {
                if (response.isSuccessful()) {
                    if (response.body() != null) {
                        if (response.body().getRes() != null) {
                            if (response.body().getRes().getToday().size() > 0) {
                                loader.setVisibility(View.GONE);
                                //Foreach
                                for (int i = 0; i < response.body().getRes().getToday().size(); i++) {

                                    if (response.body().getRes().getToday().get(i).getType().equals("penny")) {

                                        stepDynamicEdt = new StepDynamicEdt(response.body().getRes().getToday().get(i).getName());

                                    } else if (response.body().getRes().getToday().get(i).getType().equals("best")) {

                                        stepDynamicTxt = new StepDynamicTxt(response.body().getRes().getToday().get(i).getName());
                                    }
                                }

                                stepper.setup(new StepperFormListener() {
                                    @Override
                                    public void onCompletedForm() {

                                    }

                                    @Override
                                    public void onCancelledForm() {

                                    }
                                }, stepDynamicEdt, stepDynamicTxt)
                                        .allowNonLinearNavigation(false)
                                        .displayCancelButtonInLastStep(false)
                                        .displayBottomNavigation(false)
                                        .confirmationStepTitle("Confirm")
                                        .stepNextButtonText("Continue")
                                        .lastStepNextButtonText("Finish")
                                        .includeConfirmationStep(false)
                                        .init();
                            }
                        }
                    }
                }
            }

            @Override
            public void onFailure(Call<TodayResponse> call, Throwable t) {
                Log.e("ResponseErr", t.getMessage());
            }
        });
    }

    @Override
    protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase));
    }
}

我认为这一行的这个问题:}, stepDynamicEdt, stepDynamicTxt)因为只需添加 2 步。

如何在 Android 中动态添加此步骤?

4

1 回答 1

1

在您的代码中,您犯了一个非常根本的错误。也就是说,您每次在循环中都使用相同的变量来存储动态编辑类型和动态文本类型,这将替换任何以前创建的字段。因此,当您最终创建它们时,您最终会得到每种类型的最后一个值。

您可以做的是,使用 type 创建一个 List,Step每次获取它们时添加新类型,最后将该列表传递给构建器。

构建器也接受列表,您应该在其开源时检查实现。

// before the for loop, create a list of type Step
List<Step> steps = new ArrayList();
// your loop on response received from server
for (int i = 0; i < response.body().getRes().getToday().size(); i++) {
    if (response.body().getRes().getToday().get(i).getType().equals("penny")) {
        StepDynamicEdt stepDynamicEdt = new StepDynamicEdt(response.body().getRes().getToday().get(i).getName());
        // add to list
        steps.add(stepDynamicEdt);
    } else if (response.body().getRes().getToday().get(i).getType().equals("best")) {
        StepDynamicTxt stepDynamicTxt = new StepDynamicTxt(response.body().getRes().getToday().get(i).getName());
        // add to list
        steps.add(stepDynamicTxt);
    }
}
// finally create them
stepper.setup(new StepperFormListener() {
    @Override
    public void onCompletedForm() {

    }

    @Override
    public void onCancelledForm() {

    }
}, steps) // pass the list
        .allowNonLinearNavigation(false)
        .displayCancelButtonInLastStep(false)
        .displayBottomNavigation(false)
        .confirmationStepTitle("Confirm")
        .stepNextButtonText("Continue")
        .lastStepNextButtonText("Finish")
        .includeConfirmationStep(false)
        .init();
于 2019-07-16T11:30:16.873 回答