notifyDataSetChanged() - IndexOutOfBoundException [英] notifyDataSetChanged() - IndexOutOfBoundException
问题描述
我不明白什么是错
我用
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();
}
和(最有趣的)
我得到numberToDelete = 1
I get numberToDelete = 1
这行,然后删除
但对象
but objects
和当numberToDelete = 0
and when numberToDelete = 0
这行,然后删除
但对象
but objects
和当numberToDelete = 2
AND when numberToDelete = 2
对象
但是经过notifyDataSetChanged(); IndexOutOfBoundException
我已经有一个职位......但我解决不了这个问题。
I already have a post ... but I can not solve this problem
<一个href="http://stackoverflow.com/questions/11990399/indexoutofboundexception-when-i-use-notifydatasetchanged">IndexOutOfBoundException当我使用notifyDataSetChanged
stackoverflow.com/a/9260757/1568164我觉得情况是这样的,我使用,但无法正常工作
stackoverflow.com/a/9260757/1568164 I am feeling that the situation is this, i use but not work
然后我得到的位置,进一步去除
Then I get a position to further remove
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 basis Activity where I call the removal line
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);
}
}
继续主题 我试验并得出结论,在适配器列表中的字符串没有什么可以做的事实,输出到屏幕上,因此面临的挑战是不断变化的。需要了解如何从屏幕中删除行
continuing the theme I experimented and concluded that the strings in the list of adapters have little to do with the fact that the output to the screen, so the challenge is changing. need to understand how to delete rows from the screen
推荐答案
解决方案很简单。
viewHolder.text
.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
没有正常工作,重画重点的名单已发生变化,删除线混乱..苦恼了一个星期的决定很简单,留给修复
did not work properly, redraw the list of focus has changed and deleted lines chaotic .. agonized for a week a decision was simple, left to fix
这篇关于notifyDataSetChanged() - IndexOutOfBoundException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!