2016-05-09 3 views
-1

Итак, мой вопрос: я создал список и заполнил его с помощью простого адаптера курсора. Итак, теперь, когда я нажимаю элемент в своем списке, он принимает меня к другому действию, которое предполагает показать мне детали элемента, который я нажал. Каков наилучший подход к этому? Вот моя функция заполнения списка. Что именно я должен отправлять на следующий вид деятельности? Я думал о том, чтобы отправить позицию, но тогда это не сработает, потому что в следующем действии я должен был бы получить доступ к базе данных, используя эту позицию, но это не было бы точным, потому что в базе данных могли быть удалены строки, которые могут вернуть мне другую строку данных. Любые идеи будут по-настоящему оценены.Заполнение списка с помощью базы данных

private void populateListView(){ 

    Cursor cursor = myDatabase.getAllData(); 
    String[] fromfieldNames = new String[]{StudentDBOpenHelper.ITEM_NAME_COLUMN}; 
    int[] toViewIDs = new int[] {R.id.textView_itemName}; 
    SimpleCursorAdapter myCursorAdapter; 
    myCursorAdapter = new SimpleCursorAdapter(getActivity(), 
      R.layout.indvidualview_layout,cursor,fromfieldNames,toViewIDs,0); 
    ListView myList = (ListView) getActivity().findViewById(R.id.courseListXML); 
    myList.setAdapter(myCursorAdapter); 


    myList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 


      Intent nextActivity = new Intent(getActivity(), CourseWorkItemActivity.class); 

      nextActivity.putExtra("Item", position); 

      startActivity(nextActivity); 

     } 
    }); 
} 

ответ

1

Я бы предложил отправить данные, извлеченные из курсора, как дополнительные дополнения. Вот пример (немного сложнее, чем то, что вы хотите, как на Itemclick отобразить промежуточный диалог для выбора Edit или бульона (место изделия в проход в магазине) варианты: -.!

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

Примечание ShopperDBHelper.PRODUCTS_COLUMN_?????_INDEX приравнивается к смещению соответствующего столбца в курсор. Я использую намерение Extra Caller для уведомления о запущенной деятельности вызывающей деятельности (например, акции могут быть вызваны из продукта, магазина или прохода), чтобы он мог действовать соответствующим образом.

В приведенном выше position используется для перемещения в соответствующую строку курсора (Тем не менее, я считаю, что это фактически не требуется, поскольку курсор уже будет размещен, но сделайте это только на случай).

Я также использую пользовательский курсор, но это не должно, я считаю, быть проблемой (я никогда не использовал simpleCursor).

+0

Я попробую! Спасибо. – Carlitos

+1

Следует отметить, что при возврате из начального действия, если эта активность изменяет базу данных, вы должны повторить запрос и сбросить адаптер, чтобы использовать новый/измененный курсор через 'changeCursor',' swapCursor' или 'notifyDataSetCahnged' (Я использовал swapCursor и делаю это в методе onresume). например 'currentproductsperaisleecursor = shopperdb.getProductsperAisle (currentaisleid); // Переключить на этот курсор current_productsperaislecursoradapter.swapCursor (currentproductsperaisleecursor); ' – MikeT

Смежные вопросы