Es gibt eine Aktivität, die listItems anzeigt (über einen cursorAdapter).Call finish() innerhalb einer View.OnClickListener-Implementierungsklasse
Das XML des ListItems enthält einige Schaltflächen. In der newView()
Methode des Cursoradapters erhalten diese Schaltflächen die onClickListener
, nicht durch eine anonyme Deklaration, gibt es eine Klasse, die den Listener implementiert. Wenn auf einen bestimmten Knopf geklickt wird, sollte die Aktivität, bei der alles passiert, beendet sein.
Ich bin nicht überrascht, dass Aufruf finish()
in der Button-Klasse nicht funktioniert. activityContext.finish
funktioniert auch nicht.
Also, wie kann ich das schaffen?
public class DetailActvityActionBtn implements View.OnClickListener {
private Context context;
@Override
public void onClick(View view){
context = view.getContext();
System.out.println("CONTEXT:" + context);
///Itemroot
LinearLayout root =(LinearLayout) view.getRootView().findViewById(R.id.detailRoot);
///Tag that stores data
ItemViewAndDataHolder holder = (ItemViewAndDataHolder) root.getTag();
System.out.println("HOLDER: " + holder.toString());
//Get id of item
int id = holder.getId();
//Get quantity of item
int quantity = Integer.parseInt(holder.getQuantity().getText().toString().replaceAll("[^0-9]",""));
///Append id to URI
Uri updateItemUri = ContentUris.withAppendedId(InventoryDB_Contract.entries.CONTENT_URI, id);
///To determine the clicked button, get ID as String
String btnIDasString = context.getResources().getResourceName(view.getId());
System.out.println(btnIDasString);
ContentValues values = new ContentValues();
int updatedRow;
switch (btnIDasString){
case "com.example.android.inventoryapp:id/plusBtn":
System.out.println("plus");
values.put(InventoryDB_Contract.entries.COLUMN_PRODUCT_QUANTITY_IN_STOCK, quantity + 1);
context.getContentResolver().update(updateItemUri, values, null, null);
//CRcaller.saleItem(1);
break;
case "com.example.android.inventoryapp:id/minusBtn":
System.out.println("mins");
values.put(InventoryDB_Contract.entries.COLUMN_PRODUCT_QUANTITY_IN_STOCK, quantity - 1);
updatedRow = context.getContentResolver().update(updateItemUri, values, null, null);
break;
case "com.example.android.inventoryapp:id/deleteItemBtn":
System.out.println("delete");
context.getContentResolver().delete(updateItemUri, null, null);
context.finish();
break;
}
}
}
Versuchen Sie getActivity(). Finish(); Siehe hierzu: https://stackoverflow.com/questions/4594996/activity-finish-called-but-activity-stays-loaded-in-memory – MatiRC