0
我有一个SQLite表,并在某些活动中,我获取表中的所有名称,并使用这些名称填充列表视图。该应用程序。从ListView删除项目时崩溃
在listview监听器中,用户可以删除选定的项目。
问题是当我删除应用程序崩溃的项目。
请把我的代码来看看:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mylocations);
tv_counter = (TextView) findViewById(R.id.counter);
tv_testCounter = (TextView) findViewById(R.id.testCounter);
lv = (ListView) findViewById(R.id.mylist);
mpoh = new MP_DB(this);
db = mpoh.getWritableDatabase();
cv = new ContentValues();
if (hasRecords()) {
Toast.makeText(getBaseContext(), getRowsNum()+" row(s)", Toast.LENGTH_SHORT).show();
get_MPNames();
arrayToArrayList();
setListView();
lv.setOnItemClickListener(listViewListener);
} else {
Toast.makeText(getBaseContext(), "NO RECORDS"+","+getRowsNum()+"rows", Toast.LENGTH_SHORT).show();
}
}
以下是数组ArrayList的转换方法,和列表视图听众:
private void arrayToArrayList() {
int s = str.length;
al = new ArrayList<String>();
for (int i=0; i < s; i++) {
al.add(str[i]);
}
}
private int getRowsNum() {
return mpoh.getCurrentRowNumber();
}
OnItemClickListener listViewListener =新OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
pos = arg2;
showDialoge();
}
};
这里我如何从数据库和ListView中删除元素:
private void deleteMPfromListView(int pos) {
al.remove(pos);
adapter.notifyDataSetChanged();
Toast.makeText(getBaseContext(), al.size()+" rows left in list view", Toast.LENGTH_SHORT).show();
}
private void deleteMPFromDB(int pos) {
mpoh.deleteMP(pos);
Toast.makeText(getBaseContext(), getRowsNum()+" rows left in DB", Toast.LENGTH_SHORT).show();
}
private Boolean hasRecords() {
if (getRowsNum() == 0) {
return false;
} else {
return true;
}
}
private void setListView() {
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,
android.R.id.text1, al);
lv.setAdapter(adapter);
}
private void get_MPNames() {
str = new String[getRowsNum()];
for (int i=0; i <= getRowsNum()-1; i++) {
str[i] = mpoh.getMP_Name(i+1);
} //tv_testCounter.setText(str[87]);
}
但似乎我的列表视图比你贴的不同,请参见下面 – LetsamrIt 2012-02-26 09:32:44
私人无效setListView(){ \t \t \t \t适配器=新ArrayAdapter(this,android.R.layout.simple_list_item_1, android.R.id.text1,str); lv.setAdapter(adapter); \t} –
LetsamrIt
2012-02-26 09:33:54
我没有看到任何真正的区别。您有适配器的第四个参数。这只是布局中ListView的ID。有关详细信息,请参阅http://developer.android.com/reference/android/widget/ArrayAdapter.html#ArrayAdapter%28android.content.Context,%20int,%20int,%20java.util.List%3CT%3E%29。 ArrayAdapter。 lv.setAdapter(adapter);似乎与setListAdapter(适配器)类似; 。不同之处在于我在ListView Activity中调用了它,并且您有一个对象ListView lv = ...,然后使用setAdapter的外部调用来设置适配器。 – Moritz 2012-02-26 09:48:36