簡體   English   中英

使用CardsUI在onContextItemSelected中獲取ID

[英]Get ID inside onContextItemSelected with CardsUI

我有一個具有連接到SQL數據庫的ListView的應用程序...現在,我想更新該應用程序以使用CardsUI https://github.com/nadavfima/cardsui-for-android

到目前為止,這段代碼一直運行良好:

public boolean onContextItemSelected(final MenuItem item) {
    switch (item.getItemId()) {
        case DONE_ID:
            AdapterContextMenuInfo infod = (AdapterContextMenuInfo) item
                    .getMenuInfo();
            long infodId = infod.id;
            Cursor items = dbAdapter.getMyItem(infodId);
            startManagingCursor(items);

            String title = items.getString(items
                    .getColumnIndexOrThrow(DbAdapter.KEY_TITLE));
            String description = items.getString(items
                    .getColumnIndexOrThrow(DbAdapter.KEY_DESCRIPTION));
            int priority = items.getInt(items
                    .getColumnIndexOrThrow(DbAdapter.KEY_PRIORITY));

            dbAdapter.updateList(infodId, priority, title,
                    description);
            return true;
        case EDIT_ID:
            AdapterContextMenuInfo idInfo = (AdapterContextMenuInfo) item
                    .getMenuInfo();
            long idInfolong = idInfo.id;
            Intent i = new Intent(this, Detail.class);
            i.putExtra(DbAdapter.KEY_ROWID, idInfolong);
            startActivityForResult(i, ACTIVITY_EDIT);
            return true;
    }
    return super.onContextItemSelected(item);
}

public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;

    menu.add(0, EDIT_ID, 0, R.string.menu_edit);
    menu.add(0, DONE_ID, 0, R.string.menu_done);
}

如何在卡上使用此代碼? 它總是崩潰。 我了解到,如果您管理SQL游標,則它將連接到MySQL。 如何在onContextItemSelected獲取記錄的ID?

這是我的logcat輸出:

10-22 19:28:37.213: E/AndroidRuntime(3087): FATAL EXCEPTION: main
10-22 19:28:37.213: E/AndroidRuntime(3087): Process: com.myapp.mylist, PID: 3087
10-22 19:28:37.213: E/AndroidRuntime(3087): java.lang.NullPointerException
10-22 19:28:37.213: E/AndroidRuntime(3087):     at com.myapp.mylist.MainActivtiy.onContextItemSelected(MainActivity.java:395)
10-22 19:28:37.213: E/AndroidRuntime(3087):     at android.app.Activity.onMenuItemSelected(Activity.java:2620)
10-22 19:28:37.213: E/AndroidRuntime(3087):     at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:350)
10-22 19:28:37.213: E/AndroidRuntime(3087):     at android.support.v7.app.ActionBarActivity.onMenuItemSelected(ActionBarActivity.java:155)
10-22 19:28:37.213: E/AndroidRuntime(3087):     at com.android.internal.policy.impl.PhoneWindow$DialogMenuCallback.onMenuItemSelected(PhoneWindow.java:3864)
10-22 19:28:37.213: E/AndroidRuntime(3087):     at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:741)
10-22 19:28:37.213: E/AndroidRuntime(3087):     at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
10-22 19:28:37.213: E/AndroidRuntime(3087):     at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:884)
10-22 19:28:37.213: E/AndroidRuntime(3087):     at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
10-22 19:28:37.213: E/AndroidRuntime(3087):     at com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:167)
10-22 19:28:37.213: E/AndroidRuntime(3087):     at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:941)
10-22 19:28:37.213: E/AndroidRuntime(3087):     at android.widget.AdapterView.performItemClick(AdapterView.java:299)
10-22 19:28:37.213: E/AndroidRuntime(3087):     at android.widget.AbsListView.performItemClick(AbsListView.java:1113)
10-22 19:28:37.213: E/AndroidRuntime(3087):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2911)
10-22 19:28:37.213: E/AndroidRuntime(3087):     at android.widget.AbsListView$3.run(AbsListView.java:3645)
10-22 19:28:37.213: E/AndroidRuntime(3087):     at android.os.Handler.handleCallback(Handler.java:733)
10-22 19:28:37.213: E/AndroidRuntime(3087):     at android.os.Handler.dispatchMessage(Handler.java:95)
10-22 19:28:37.213: E/AndroidRuntime(3087):     at android.os.Looper.loop(Looper.java:136)
10-22 19:28:37.213: E/AndroidRuntime(3087):     at android.app.ActivityThread.main(ActivityThread.java:5001)
10-22 19:28:37.213: E/AndroidRuntime(3087):     at java.lang.reflect.Method.invokeNative(Native Method)
10-22 19:28:37.213: E/AndroidRuntime(3087):     at java.lang.reflect.Method.invoke(Method.java:515)
10-22 19:28:37.213: E/AndroidRuntime(3087):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
10-22 19:28:37.213: E/AndroidRuntime(3087):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
10-22 19:28:37.213: E/AndroidRuntime(3087):     at dalvik.system.NativeStart.main(Native Method)

onContextItemSelected()的SQL _id

onCreateContextMenu()中,通過適配器獲取項目的數據。 然后將itent附加到包含sql行的_id的菜單項。 現在, onContextItemSelected的意圖已附加到包含sql行_id的menuitem。

@Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {

        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
            String name = adapter2.getItem(info.position).get_name();
            menu.setHeaderTitle(name);
            MenuInflater inflater = this.getActivity().getMenuInflater();
            inflater.inflate(R.menu.menulistitem, menu);
            MenuItem mi = menu.findItem(R.id.action_context_delete);
            Intent i = new Intent();
            //put the database _id into the intent for the oncontextitemselected
            i.putExtra("id", adapter2.getItem(info.position).get_id());
            mi.setIntent(i);

    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {

        switch (item.getItemId()) {
        case R.id.action_context_delete:
            Intent i = item.getIntent();
            if (i != null) {
                Bundle b = i.getExtras();
                if (b != null) {
                    int id = b.getInt("id");
                    Uri deleteIdUri = ContentUris.withAppendedId(
                            RidesDatabaseProvider.CONTENT_URI, id);
                    context.getContentResolver()
                            .delete(deleteIdUri, null, null);
                    return true;
                }
            }
        }
        return super.onContextItemSelected(item);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM