2016-05-09 13 views
-1

Also meine Frage ist, ich habe eine Listenansicht erstellt und es mit einem einfachen Cursor-Adapter gefüllt. Wenn ich nun auf ein Element in meiner Listenansicht klicke, wird es zu einer anderen Aktivität, die mir die Details des angeklickten Objekts anzeigt. Was ist der beste Ansatz dafür? Hier ist meine Funktion zum Auffüllen der Listenansicht. Was genau sollte ich zur nächsten Aktivität schicken? Ich habe über das Senden der Position nachgedacht, aber das würde nicht funktionieren, weil ich in der nächsten Aktivität auf die Datenbank zugreifen müsste, aber das wäre nicht genau, weil in der Datenbank Zeilen gelöscht werden könnten, die mir eine andere Datenzeile zurückgeben. Irgendwelche Ideen würden wirklich geschätzt werden.Füllen einer Listenansicht mit aus einer Datenbank

Antwort

1

Ich würde vorschlagen, die Daten, extrahiert aus dem Cursor als Intent Extras. Hier ist ein Beispiel (ein wenig komplizierter, was Sie wollen, wie auf Itemclick ich einen Zwischendialog angezeigt einen Gang wählen Sie Bearbeiten oder Lager (Ort Produkte in in einem Geschäft) Optionen: -.!

productlist_csr = shopperdb.getProductsAsCursor(); 
     currentpca = new ProductsCursorAdapter(this, productlist_csr, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); 
     productlistview.setAdapter(currentpca); 

     productlistview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       AlertDialog.Builder okdialog = new AlertDialog.Builder(productlistview_context); 
       okdialog.setTitle(R.string.productlistentryclicktitle); 
       okdialog.setMessage(R.string.productlistentryclickmessage001); 
       okdialog.setCancelable(true); 
       final int pos = position; 
       okdialog.setNegativeButton(R.string.standardstockproductlist, new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         Intent intent = new Intent(productlistview_context, AddProductToShopActivity.class); 
         productlist_csr.moveToPosition(pos); 
         intent.putExtra("Caller", THIS_ACTIVITY); 
         intent.putExtra("PRODUCTID", productlist_csr.getLong(ShopperDBHelper.PRODUCTS_COLUMN_ID_INDEX)); 
         intent.putExtra("ProductName", productlist_csr.getString(ShopperDBHelper.PRODUCTS_COLUMN_NAME_INDEX)); 
         intent.putExtra("ProductNotes", productlist_csr.getString(ShopperDBHelper.PRODUCTS_COLUMN_NOTES_INDEX)); 
         startActivity(intent); 
         dialog.cancel(); 
        } 
       }); 
       okdialog.setPositiveButton(R.string.standardedittext, new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         Intent intent = new Intent(productlistview_context, ProductAddActivity.class); 
         intent.putExtra("Caller", THIS_ACTIVITY + "Update"); 
         productlist_csr.moveToPosition(pos); 
         intent.putExtra("ProductName", productlist_csr.getString(ShopperDBHelper.PRODUCTS_COLUMN_NAME_INDEX)); 
         intent.putExtra("ProductNotes", productlist_csr.getString(ShopperDBHelper.PRODUCTS_COLUMN_NOTES_INDEX)); 
         intent.putExtra("PRODUCTID", productlist_csr.getLong(ShopperDBHelper.PRODUCTS_COLUMN_ID_INDEX)); 
         startActivity(intent); 
         dialog.cancel(); 
        } 
       }); 
       okdialog.setNeutralButton(R.string.standardbacktext, new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.cancel(); 
        } 
       }); 
       okdialog.show(); 
      } 
     }); 

Hinweis ShopperDBHelper.PRODUCTS_COLUMN_?????_INDEX entspricht dem Offset der jeweiligen Spalte in den Cursor Ich nutze die Intention Extra Caller, um die gestartete Aktivität der aufrufenden Aktivität zu melden (zB Lager kann von einem Produkt, einem Geschäft oder einem Gang aufgerufen werden), damit sie entsprechend agieren kann.

In der oben genannten position wird verwendet, um in die entsprechende Cursorzeile zu verschieben (Ich glaube jedoch, dass dies nicht wirklich benötigt wird, da der Cursor bereits positioniert ist, aber tun Sie dies nur für den Fall).

Ich benutze auch einen benutzerdefinierten Cursor, aber das sollte nicht, glaube ich, ein Problem sein (ich habe noch nie verwendet SimpleCursor).

+0

Ich werde das versuchen! Vielen Dank. – Carlitos

+1

Eine Sache zu beachten ist, dass bei der Rückkehr von der gestarteten Aktivität, wenn diese Aktivität die Datenbank ändert, sollten Sie die Abfrage wiederholen und den Adapter zurücksetzen, um den neuen/modifizierten Cursor über 'changeCursor',' swapCursor' oder 'notifyDataSetCahnged' zu verwenden (Ich habe swapCursor verwendet und dies in der Onresume-Methode). zB 'currentproductsperaisleecursor = shopperdb.getProductsperAisle (currentaisleid); // Zu diesem Cursor wechseln current_productsperaislecursoradapter.swapCursor (currentproductsperaisleecursor); ' – MikeT