简体   繁体   中英

Get ID inside onContextItemSelected with CardsUI

I have an app which has had a ListView which is connected to a SQL database... Now I want to update the app to use the CardsUI https://github.com/nadavfima/cardsui-for-android

This code has been working fine until now:

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

How can I use this code with the Cards? It always crashes. I read that if you manage a SQL cursor, it's connected to the MySQL. How can I get the ID of my record inside onContextItemSelected ?

This is the my logcat output:

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)

SQL _id for onContextItemSelected()

In onCreateContextMenu() Get the data of the item via the adapter. Then attach an itent to the menu item that contains the _id for the sql row. onContextItemSelected now has an intent attached to the menuitem that contains the sql row _id.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM