Мой код RUNS (см. Источник ниже), но отображаются только виджеты из макета XML
файл. Динамически создаваемые виджеты, код которых теперь выполняется без ошибок [ough, up], не отображаются
самих себя. Кто-нибудь знает, почему это будет? Кстати, есть контакты (4), и шаг за шагом
код, возвращаемые значения действительны.
Единственное, что странно в vals, это то, что два из четырех имен Контактов имеют "\ t" между
имя и фамилия, а-ля "Барни \ т щебень" (я сомневаюсь, что это проблема, но удивляюсь, почему два
если бы я ввел имена контактов точно таким же образом ...)
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ondemandandautomatic_dynamicauthorize);
ScrollView svh = (ScrollView) findViewById(R.id.scrollViewHost);
// Create a Linear Layout for each contact?
LinearLayout llay = new LinearLayout(this);
llay.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams llp = new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
llp.weight = 1.0f;
svh.addView(llay);
// Contacts data snippet adapted from
// http://saigeethamn.blogspot.com/2011/05/contacts-api-20-and-above-android.html
ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
null, null, null);
if (cur.getCount() > 0) {
while (cur.moveToNext()) {
String id = cur.getString(cur
.getColumnIndex(ContactsContract.Contacts._ID));
String name = cur
.getString(cur
.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
// The previous LinearLayout was added to the ScrollView; these
// in the loop will be added to that one
LinearLayout llayDynamic = new LinearLayout(this);
llayDynamic.setOrientation(LinearLayout.HORIZONTAL);
LinearLayout.LayoutParams llpDynamic = new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
llpDynamic.weight = 1.0f;
CheckBox cbOnDemand = new CheckBox(getApplicationContext());
cbOnDemand.setTag(id);
cbOnDemand.setLayoutParams(llp);
llayDynamic.addView(cbOnDemand);
CheckBox cbTime = new CheckBox(getApplicationContext());
cbOnDemand.setTag(id);
cbTime.setLayoutParams(llp);
llayDynamic.addView(cbTime);
CheckBox cbSpace = new CheckBox(getApplicationContext());
cbOnDemand.setTag(id);
cbSpace.setLayoutParams(llp);
llayDynamic.addView(cbSpace);
TextView tv = new TextView(getApplicationContext());
tv.setTag(id);
tv.setText(name);
tv.setLayoutParams(llp);
llayDynamic.addView(tv);
llayDynamic.invalidate();
}
// One cat on stackOverflow said to do this, another said it
// would be unnecessary
svh.invalidate();
}
}
Обновление:
Хорошо, я исправил проблему с не отображаемыми виджетами, добавив:
llay.addView(llayDynamic);
... до, возможно, ненужного вызова llayDynamic.invalidate ()
ОДНАКО, отображаемые виджеты все еще в беспорядке. См. http://warbler.posterous.com/widgets-are-still-deformedimitating-brain-dea, чтобы понять, что я имею в виду.
Я полагаю, что я могу получить вещи в пространстве лучше, экспериментируя со свойствами заполнения и тому подобным, но первый дочерний LinearLayout, появляющийся справа (в той же строке) с родительским LinearLayout (потомком ScrollView), является проблемой.
Зачем это нужно, и как я могу это решить?