Tôi gặp sự cố khi nhận vị trí của trẻ là LinearLayout. Đầu tiên tôi thêm động một số nút và sau đó tôi đang cố gắng trả lại chỉ mục của từng trẻ và hiển thị nó thành một văn bản TextView. mã ở đây tôi chia sẻ:Tự động thêm con vào LinearLayout với vị trí của mỗi đứa trẻ
nguồn java:
private String[] categories;
private LinearLayout ll;
private TextView tv;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
categories = getResources().getStringArray(R.array.categories);
tv = (TextView) findViewById(R.id.text);
ll = (LinearLayout) findViewById(R.id.hsvLinearLayout);
for(int i = 0; i < categories.length; i++) {
Button btn = new Button(this);
btn.setText(categories[i]);
btn.setOnClickListener(buttonClick);
ll.addView(btn);
}
}
OnClickListener buttonClick = new OnClickListener() {
public void onClick(View v) {
tv.setText(ll.indexOfChild(v));
}
};
cấu trúc xml:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<HorizontalScrollView
android:id="@+id/Footer"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scrollbars="none"
android:fadingEdge="none"
>
<LinearLayout
android:id="@+id/hsvLinearLayout"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
</LinearLayout>
</HorizontalScrollView>
<TextView
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
nguồn:
<string name="today">Today</string>
<string name="life">Life</string>
<string name="corner">Corner</string>
<string name="banks">Banks</string>
<string name="it">IT</string>
<string name="fun">Fun</string>
<array name="categories">
<item>@string/today</item>
<item>@string/life</item>
<item>@string/corner</item>
<item>@string/banks</item>
<item>@string/it</item>
<item>@string/fun</item>
</array>
Tính năng thêm động là tốt, nhưng cách tôi đang đặt OnClickListener sẽ xuất hiện một số lỗi. Bất kỳ trợ giúp sẽ hữu ích! Mục đích của điều đó là nếu tôi muốn thêm một hoặc nhiều nút vào số HorizontalScrollView không cần thiết để chỉnh sửa nhiều tệp và chỉ cần truy cập sting.xml và tạo một mục mới vào các danh mục -array!
Đây là những gì LogCat sản xuất:
07-12 22:37:17.680: INFO/System.out(331): waiting for debugger to settle...
07-12 22:37:17.900: INFO/System.out(331): debugger has settled (1441)
07-12 22:37:20.870: INFO/ActivityManager(61): Displayed activity com.test/.TestDynam: 10203 ms (total 10203 ms)
07-12 22:37:25.552: WARN/ResourceType(331): No package identifier when getting value for resource number 0x00000000
07-12 22:37:26.871: DEBUG/dalvikvm(132): GC freed 190 objects/8976 bytes in 901ms
Để làm rõ - các ứng dụng khởi động mà không cần bất kỳ lỗi nào, nhưng khi tôi bấm vào một nút nó tạo ra dòng này từ nhật ký trên:
07-12 22:37:25.552: WARN/ResourceType(331): No package identifier when getting value for resource number 0x00000000
Và đây là từ trình gỡ lỗi:
TestDynam [Android Application]
DalvikVM[localhost:8611]
Thread [<3> main] (Suspended (exception Resources$NotFoundException))
ViewRoot.handleMessage(Message) line: 1704
ViewRoot(Handler).dispatchMessage(Message) line: 99
Looper.loop() line: 123
ActivityThread.main(String[]) line: 4203
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
Method.invoke(Object, Object...) line: 521
ZygoteInit$MethodAndArgsCaller.run() line: 791
ZygoteInit.main(String[]) line: 549
NativeStart.main(String[]) line: not available [native method]
Thread [<13> Binder Thread #2] (Running)
Thread [<11> Binder Thread #1] (Running)
... hoặc' tv.setText ("" + ll.indexOfChild (v)); 'anyway cảm ơn rất nhiều, chẳng hạn một sai lầm nhỏ! – nenito
cảm ơn bạn nó rất hữu ích :) –