gpt4 book ai didi

android - notifyDataSetChanged() - IndexOutOfBoundException

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:06:49 25 4
gpt4 key购买 nike

我不明白这是怎么回事

我在用

  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(最有趣的)

我得到 numberToDelete = 1

此行随后被删除

enter image description here

但是对象 enter image description here

当 numberToDelete = 0 时

此行随后被删除

enter image description here

但是对象 enter image description here

当 numberToDelete = 2 时

对象

enter image description here

但在 notifyDataSetChanged() 之后; IndexOutOfBoundException

我已经有帖子了……但是我解决不了这个问题

IndexOutOfBoundException when I use notifyDataSetChanged

stackoverflow.com/a/9260757/1568164 我感觉情况是这样的,我使用但不工作

然后我得到一个位置进一步删除

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;

}

我调用删除线的基础 Activity

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);
}

}

延续主题我试验并得出结论,适配器列表中的字符串与向屏幕输出的事实关系不大,因此挑战正在发生变化。需要了解如何从屏幕上删除行

最佳答案

解决方案很简单。

viewHolder.text
.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {

没有正常工作,重绘列表焦点变了,删行乱了..折腾了一个星期一个决定很简单,留待修复

关于android - notifyDataSetChanged() - IndexOutOfBoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12002588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com