我的代码RUNS(参见下面的源代码),但显示的唯一小部件是来自xml布局的小部件 文件。动态创建的小部件,现在运行的代码没有hicc [ough,up],不显示 他们自己。有人知道为什么会这样吗?顺便说一句,有联系人(4),并逐步通过 返回值的代码有效。
val中唯一奇怪的是四个Contact名称中的两个之间有一个“\ t” 第一个和最后一个名字,一个la“Barney \ t Rubble”(我怀疑这是一个问题,但想知道为什么两个会 当我以完全相同的方式输入联系人姓名时,有两个不会...)
@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的子节点)是一个问题。 / p>
为什么会这样做,我该如何解决?
答案 0 :(得分:3)
您永远不会向名为LinearLayout
的{{1}}添加任何内容,该llay
位于ScrollView
内。
尝试在while
循环中添加此内容:
llay.addView(llayDynamic);