Удалить элемент из ListView с помощью onActivityResult

Предложи еще раз мой вопрос.Извините за повторение.

У меня есть ListView, где есть все приложения, установленные на устройстве. При щелчке по элементу, часть удаления. Пока все работает нормально, проблема в том, что после удаления приложения он больше не находится на устройстве, он остается в списке. Очевидно, это плохо, поэтому я написал этот код, чтобы попытаться удалить его, как только он был удален.

int position;
myListView.setOnItemClickListener(new OnItemClickListener() {

 public void onItemClick(AdapterView<!--?--> parent, View v, int position, long id)
 { 
 int requestCode = 1;
 app = appInfoArrayList.get(position);
 Uri packageUri = Uri.parse("package:"+app.packagename);
 //In theory i should put
 //this.position=position;
 //But Eclipse says "position cannot be resolved or is not a field"
 Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageUri);
 startActivityForResult(uninstallIntent, requestCode);
 }

 }); 

protected void onActivityResult(int requestCode, int resultCode, Intent data)
 {

 String msg = "MyApp: ";
 super.onActivityResult(requestCode, resultCode, data);
 if (requestCode == 1)
 {

 try {
 packageInfo = getPackageManager().getApplicationInfo(app.packagename, 0);
 }
 catch (PackageManager.NameNotFoundException e) {
 Log.v("Catch",msg ); 
 appInfoArrayList.remove(position);
 adapter.notifyDataSetChanged(); 
 }

 }

 else {

 }

 Log.v(msg, String.valueOf(resultCode)+", "+String.valueOf(requestCode));

 }

В LogCat я читаю: MyApp: Catch 0 (resultCode), 1 (requestCode). Таким образом, это означает, что он правильно входит в catch, но, несмотря на это, даже если приложение было удалено, все еще находится в списке. Идеи о том, как я могу это исправить? Заранее спасибо.

Объявление адаптера

AppAdapter adapter;
3 ответа

position в appInfoArrayList.remove(position); неинициализирован, убедитесь, что вы присвоили ему значение.


Вы должны перерисовать список, вызвать адаптер.notifyDataSetChanged() после обновления источника данных адаптера, это должно решить проблему, если вы используете тот же ArrayList для хранения и отображения данных


Вы используете это для исключения

appInfoArrayList.remove(position);
adapter.notifyDataSetChanged();

Это должно быть вызвано правильно, чтобы отразить изменения, проверить данные

licensed under cc by-sa 3.0 with attribution.