У меня есть класс, который подклассов ConstraintLayout, который представляет раздел действия, которым я управляю программно.У меня есть версия XML, похоже, она работает, и я пытаюсь воспроизвести это программно.Я использую эту концепцию несколько раз в различных действиях в своем приложении, поэтому подумал, что было бы хорошо автоматизировать ее.Я создаю класс, который является подклассом ConstraintLayout, и пытаюсь добавить представления к классу, когда происходит сбой действия, когда я либо пытаюсь клонировать его собственный ConstraintSet, либо в методе addBusinessDay, либо в генерирующем действии.
Если япопробуйте установить ограничения из действия, которое я пробовал:
ConstraintSet cs = new ConstraintSet();
cs.clone(mBusinessWeek);
cs.connect(mIds[0], ConstraintSet.START, mBusinessWeek.mId, ConstraintSet.START, 0);
cs.setHorizontalBias(mIds[0], .5f);
cs.connect(mIds[0], ConstraintSet.END, mIds[1], ConstraintSet.START, 8);
cs.applyTo(mBusinessWeek);
Я изменил сигнатуру метода AddBusiness на
public void addBusinessDay(String txt, int id, int sId, int eId){
и сделал вызовы ограничений в концеmethod
ConstraintSet cs = new ConstraintSet();
cs.clone(this); // Even tried to comment this out
cs.connect(id, ConstraintSet.START, sId, ConstraintSet.START, 0);
cs.setHorizontalBias(id, .5f);
cs.connect(id, ConstraintSet.END, eId, ConstraintSet.START, 8);
cs.applyTo(this);
Ошибка при выполнении вызова клона (this).Если я прокомментирую призыв клонировать ошибки активности в applyTo (this);
Вот класс и один конструктор.
public class BusinessWeek extends ConstraintLayout {
// My id
public int mId;
public BusinessWeek(Context c, ConstraintLayout parentLayout){
super(c);
ConstraintLayout.LayoutParams lp = new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
setLayoutParams(lp);
mId = View.generateViewId();
setId(mId);
parentLayout.addView(this);
}
public void addBusinessDay(String txt, int id){
TextView day = new TextView(getContext());
ConstraintLayout.LayoutParams lp = new
ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
day.setLayoutParams(lp);
day.setText(txt);
setId(id);
addView(day);
}
}
В своей деятельности я выполняю набор вызововcall:
// Get the parent ConstraintLayout
ConstraintLayout cl = findViewById(R.id.clServiceDay);
// Instantiate class
mBusinessWeek = new BusinessWeek(this, cl);
// Generate ViewIds
int[7] mIds = new int[7];
for (int i = 0; i <7; i++)
mIds[i] = = View.generateViewId();
// Generate businessDays in a horizontal chain
mBusinessWeek.addBusinessDay("Mo", mIds[0]);
mBusinessWeek.addBusinessDay("Tu", mIds[1]);
mBusinessWeek.addBusinessDay("We", mIds[2]);
mBusinessWeek.addBusinessDay("Th", mIds[3]);
mBusinessWeek.addBusinessDay("Fr", mIds[4]);
mBusinessWeek.addBusinessDay("Sa", mIds[5]);
mBusinessWeek.addBusinessDay("Su", mIds[6]);
И это в основном работает, потому что наборы ограничений не установлены.Виды накапливаются в левой части страницы, как и следовало ожидать.