Tôi đang làm việc trên một ứng dụng mẫu để tìm hiểu android. Nó được cho là để hiển thị một danh sách chọn nhiều và khi người dùng nhấp vào nút nó sẽ hiển thị các mục được chọn trong một TextView ở đầu trang. Có vẻ như khi tôi cố gắng lấy các mục đã chọn từ ListView, một mảng trống luôn được trả về. Bất cứ ai có thể giải thích cho tôi tại sao đây là trường hợp và những gì tôi đang thiếu để làm cho nó hoạt động chính xác? (FYI mã là một chương trình sửa đổi từ Beginning Android 4 bởi Grant Allen)Mảng trống khi sử dụng getListView(). GetCheckedItemIds()
Dưới đây là file layout xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="@+id/selection"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/getSelections"
android:text="Show Selections"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="listSelected" />
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:drawSelectorOnTop="false"
android:choiceMode="multipleChoice" />
</LinearLayout>
Và đây là Java liên quan:
package com.commonsware.android.checklist;
import android.os.Bundle;
import android.app.ListActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.view.*;
public class ChecklistDemo extends ListActivity {
private static final String[] items={"lorem", "ipsum", "dolor",
"sit", "amet",
"consectetuer", "adipiscing", "elit", "morbi", "vel",
"ligula", "vitae", "arcu", "aliquet", "mollis",
"etiam", "vel", "erat", "placerat", "ante",
"porttitor", "sodales", "pellentesque", "augue", "purus"};
private TextView selection;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_multiple_choice,
items));
selection = (TextView)findViewById(R.id.selection);
}
public void listSelected(View view) {
long[] chosenOnes = getListView().getCheckedItemIds();
selection.setText("Items selected: ");
selection.setText(Integer.toString(chosenOnes.length));
for (long x:chosenOnes) {
int i = Long.valueOf(x).intValue();
selection.setText(selection.getText() + ", " + items[i]);
}
}
}
Awesome, nhờ một bó cho điều đó. Theo dõi, tôi có thể yêu cầu làm rõ một số điều chính xác làm cho id ổn định không? –
Vâng tôi cũng muốn biết. Tôi đoán nó có nghĩa là mỗi id luôn tương ứng với cùng một đối tượng, nhưng tài liệu không rõ ràng. – Timmmm
bạn có thể ghi đè phương thức hasStableIds() trong BaseAdapter chẳng hạn, và để cho nó trả về true nếu getId() của bạn được triển khai đúng cách. – Ostkontentitan