Tôi không hiểu những gì là sainotifyDataSetChanged() - IndexOutOfBoundException
Tôi sử dụng
public class UrlArrayAdapter extends BaseAdapter {...
ArrayList<UrlItem> objects;
UrlArrayAdapter(Context context, ListView urlListView,
ArrayList<UrlItem> urlLists) {
objects = urlLists; ...
//method
public void deleteItem(int numberToDelete) {
objects.remove(numberToDelete);
notifyDataSetChanged();
}
AND (thú vị nhất)
tôi nhận được numberToDelete = 1
Dòng này sau đó bị xóa
nhưng các đối tượng
và khi numberToDelete = 0
Dòng này được lấy ra
nhưng các đối tượng
VÀ khi numberToDelete = 2
đối tượng
nhưng sau notifyDataSetChanged(); IndexOutOfBoundException
Tôi đã có một bài ... nhưng tôi không thể giải quyết vấn đề này
IndexOutOfBoundException when I use notifyDataSetChanged
stackoverflow.com/a/9260757/1568164 Tôi cảm thấy rằng tình hình là thế này, tôi sử dụng nhưng không hoạt động
Sau đó, tôi nhận được một vị trí để tiếp tục loại bỏ
public View getView(int position, View convertView, ViewGroup parent) {
// Planet to display
UrlItem urlItem = (UrlItem) this.getItem(position);
ViewHolder viewHolder = null;
if (convertView == null) {
convertView = lInflater.inflate(R.layout.database_table_item, null);
viewHolder = new ViewHolder();
viewHolder.checkbox = (CheckBox) convertView
.findViewById(R.id.checkBox1);
viewHolder.checkbox.setOnCheckedChangeListener(listener1);
viewHolder.text = (EditText) convertView
.findViewById(R.id.editText1);
viewHolder.text
.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
int getPosition = (Integer) v.getTag();
if (!hasFocus) {
final EditText Caption = (EditText) v;
// urlLists
objects.get(getPosition).setUrl(
Caption.getText().toString());
} else {
DatabaseTable.setPosition(getPosition); // This is a future for "numberToDelete"
}
}
});
convertView.setTag(viewHolder);
convertView.setTag(R.id.checkBox1, viewHolder.checkbox);
convertView.setTag(R.id.editText1, viewHolder.text);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.text.setTag(position);
viewHolder.text.setText(urlItem.getUrl());
viewHolder.checkbox.setTag(position);
viewHolder.checkbox.setChecked(urlItem.getUse());
return convertView;
}
My hoạt động cơ sở nơi Tôi gọi là dòng loại bỏ
public class DatabaseTable extends Activity {
private Settings setting;
private ArrayList<UrlItem> urlLists;
private ListAdapter uAdapter;
private ListView urlListView;
static int position;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.database_table_list);
LBD conection = new LBD(this);
conection.open();
setting = conection.tblSettings();
setting.create();
urlLists = setting.selectRssTable();
urlListView = (ListView) findViewById(R.id.listView1);
uAdapter = new UrlArrayAdapter(DatabaseTable.this, urlListView,
urlLists);
urlListView.setAdapter(uAdapter);
urlListView.setItemsCanFocus(true);
}
public static void setPosition(int pos) {
position = pos;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(Menu.NONE, 2, 2, "Delete URL");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 2:
((UrlArrayAdapter) uAdapter).deleteItem(position);
break;
}
return super.onOptionsItemSelected(item);
}
}
tiếp tục chủ đề tôi đã thử nghiệm và kết luận rằng các chuỗi trong danh sách các adapter có ít để làm với một thực tế là xuất ra màn hình, vì vậy các thách thức đang thay đổi. cần hiểu cách xóa các hàng khỏi màn hình
bạn có thể thêm mã cho câu hỏi của bạn, nơi khi bạn chọn một đối tượng từ bảng bạn trả về chỉ số của đối tượng đó? –
Tôi đã thêm, vui lòng xem –
'int position' là gì, đây có phải là chỉ mục của UrlItem đã chọn không? –