Как программно добавить кнопки «Макет ограничения» в другой макет - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь создать список динамических c кнопок макета ограничения, которые обновляются каждый раз, когда пользователь изменяет текст внутри текста редактирования. Текст внутри текста редактирования будет использоваться в запросе залпа HTTP, который даст мне информацию о тексте кнопки. Причина, по которой я использую кнопку макета ограничения вместо обычной кнопки, заключается в том, что у меня много информации, настроенной так, что использование обычного текста кнопки было бы невозможным. Я уже собрал список кнопок макета Constraint, все что мне нужно сделать, это добавить их в основной макет и Constrain. Но у меня нет возможности добавить их в макет.

Вот соответствующий код:

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {

                url = "https://financialmodelingprep.com/api/v3/search?query=" + searchEditText.getText().toString() + "&limit=10";

                NetworkBridge.getInstance(getBaseContext()).addToRequestQueue(new JsonArrayRequest(Request.Method.GET, url, null, new Response.Listener<JSONArray>() {

                    @Override
                    public void onResponse(JSONArray response) {

                        ArrayList<SearchEntryInfo> searchedItemInfo = new ArrayList<SearchEntryInfo>();

                        ArrayList<ConstraintLayout> buttons = new ArrayList<ConstraintLayout>();

                        //float[] test = {0,0,0,0,0,0,0,0,0,0,0,0,0};

                        try {
                            for (int i = 0; i < response.length(); i++) {
                                searchedItemInfo.add(new SearchEntryInfo(response.getJSONObject(i).getString("symbol"), response.getJSONObject(i).getString("name"), response.getJSONObject(i).getString("currency"), response.getJSONObject(i).getString("stockExchange"), response.getJSONObject(i).getString("exchangeShortName")));
                            }

                            for(int i = 0; i < searchedItemInfo.size(); i++)
                            {
                                ConstraintLayout currentBtn = new ConstraintLayout(getBaseContext());
                                ConstraintSet currentBtnConsts = new ConstraintSet();

                                currentBtn.setId(View.generateViewId());

                                currentBtn.setMaxHeight(55);
                                currentBtn.setMinWidth(380);

                                TextView currentSym = new TextView(getBaseContext());

                                currentSym.setText(searchedItemInfo.get(i).getSymbol());
                                currentSym.setTextSize(20);
                                currentSym.setHeight(25);
                                currentSym.setWidth(85); //In Sp make use DP's eventually
                                currentSym.setTextColor(Color.BLACK);
                                currentSym.setTypeface(font);
                                currentSym.setId(View.generateViewId());

                                TextView currentName = new TextView(getBaseContext());

                                currentName.setText(searchedItemInfo.get(i).getName());
                                currentName.setTextSize(14);
                                currentName.setHeight(19);
                                currentName.setWidth(250);
                                currentName.setTextColor(0xE6E1E1);
                                currentName.setTypeface(font);
                                currentName.setId(View.generateViewId());

                                currentBtn.addView(currentSym);
                                currentBtn.addView(currentName);

                                //currentBtnConsts.clone(searchLayout);

                                currentBtnConsts.connect(currentSym.getId(), ConstraintSet.LEFT, ConstraintSet.PARENT_ID, ConstraintSet.LEFT, 16);
                                currentBtnConsts.connect(currentSym.getId(), ConstraintSet.TOP, ConstraintSet.PARENT_ID, ConstraintSet.TOP, 4);

                                currentBtnConsts.connect(currentName.getId(), ConstraintSet.LEFT, ConstraintSet.PARENT_ID, ConstraintSet.LEFT, 16);
                                currentBtnConsts.connect(currentSym.getId(), ConstraintSet.TOP, currentSym.getId(), ConstraintSet.BOTTOM, 2);
                                currentBtnConsts.connect(currentSym.getId(), ConstraintSet.BOTTOM, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM, 8);

                                currentBtnConsts.applyTo(currentBtn);

                                buttons.add(currentBtn);
                            }


                            /*int[] constButtonIds = new int[buttons.size()];

                            for(int i = 0; i < buttons.size(); i++)
                            {
                                constButtonIds[i] = buttons.get(i).getId();
                            }*/


                            ConstraintSet constMainSearchLayout = new ConstraintSet();

                            constMainSearchLayout.clone(searchLayout);

                            //constMainSearchLayout.createVerticalChain(constButtonIds[0], ConstraintSet.TOP, constButtonIds[constButtonIds.length -1],  ConstraintSet.BOTTOM , constButtonIds, test, ConstraintSet.CHAIN_SPREAD);

                            constMainSearchLayout.applyTo(searchLayout);

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }
                }, new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError error) {
                        // TODO: Handle error
                    }
                }));
            }

Вот как это должно выглядеть, за исключением многих из тех вещей, которые изменяются динамически на основании того, что ответ дает мне. enter image description here

...