Привязка объектов через ConstraintSet
Не совсем понимаю, как работает ConstraintSet. Суть кода такова, что генерируется один constraintLayout и его верх нужно привязать к toolbar, а низ к низу основного ConstrantLayout. (id: Основной ConstraintLayout - R.id.constraint Второй ConstraintLayout генерируется через код Toolbar - R.id.toolbar) Картинка с привязкой и генерацией Constrain'a ниже код
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.ExpandableListView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.constraintlayout.widget.ConstraintSet;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
int lastConstraintLayout;//Каждый раз меняется в "displayOneParcelHistory", чтобы последующий раз, эжемент присоединялся к предыдущему
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(view -> displayAllParcelsHistory(getTrackNumbersFromStorage()));
lastConstraintLayout = findViewById(R.id.toolbar).getId();
}
private void displayAllParcelsHistory(String[] trackNumbers){
for (String trackNumber:trackNumbers) {
displayOneParcelHistory(trackNumber);
}
}
@SuppressLint("ResourceType")
private void displayOneParcelHistory(String trackNumber){
String groupName = trackNumber;
ArrayList<String> listItems = getParcelHistoryData(trackNumber); //0-Событие, 1-Дата, 2-Индекс, 3-Место
//Настройка нового констрейна
ConstraintLayout constraintLayout = new ConstraintLayout(this);
ConstraintLayout.LayoutParams constraintParams = new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
constraintLayout.setId(R.integer.test_id);
this.addContentView(constraintLayout, constraintParams);
constraintLayout.setBackgroundResource(R.drawable.post_plank_shape);
constraintLayout.setMaxHeight(dpTotp(400));
//Настройка списка
ViewGroup.LayoutParams expandableListParams = new ViewGroup.LayoutParams(dpTotp(325), ViewGroup.LayoutParams.WRAP_CONTENT);
ConstraintSet expandableListSet = new ConstraintSet();
ExpandableListView listView = new ExpandableListView(this);
constraintLayout.addView(listView, expandableListParams);
//настройка привязок
ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clear(R.id.button, ConstraintSet.TOP);
constraintSet.clear(R.id.button, ConstraintSet.BOTTOM);
constraintSet.connect(R.id.button, ConstraintSet.TOP, R.id.toolbar, ConstraintSet.BOTTOM, 10);
constraintSet.connect(R.id.button, ConstraintSet.BOTTOM, R.id.constraint, ConstraintSet.BOTTOM, 10);
constraintSet.applyTo(findViewById(R.id.constraint));
// MainAdapter adapter = new MainAdapter(groupName, listItems);
// listView.setAdapter(adapter);
}
@SuppressLint("SetTextI18n")
private ArrayList<String> getParcelHistoryData (String trackNumber){ //Возвращает необходимые данные
//Получение данных от апи
Parsing parsing = new Parsing();
String apiResponse = parsing.GetParcelHistory(trackNumber);
JsonHandler.JsonPattern pattern = JsonHandler.GetJsonHistory(apiResponse);
ArrayList<String> events = new ArrayList<>();
for (JsonHandler.Event event:pattern.data.events) {
//Добавили данные
events.add(String.format("%s\n %s, %s, %s",
event.operationAttribute, event.operationDateTime, event.operationPlacePostalCode, event.operationPlaceNameTranslated));
}
return events;
}
//Доделать
private String[] getTrackNumbersFromStorage(){
String[] trackNumbers = new String[]{"80513370548691"};//, "RD105843655MN"};
return trackNumbers;
}
private int dpTotp(int dp){
return Math.round(dp * this.getResources().getDisplayMetrics().density);
}
}```

