Элемент ContextMenu выбран, но не может запуститьActivity (Intent) - PullRequest
0 голосов
/ 02 декабря 2011

У меня настроено contextMenu, и оно показывает элементы из списка. Однако, когда элемент выбран, он ничего не делает. Я пробовал разные способы; используя .setCheckable() или вызывая намерение. Я не получаю никаких ошибок, но он ничего не делает. Один и тот же класс может быть вызван через Intent с отдельной кнопки, и он отлично работает.

Я думаю, что мне не хватает некоторых важных деталей в коде.

    `package com.myExperiment.androidapp.userinterface;

import android.app.Activity;
//import android.app.ListActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
//import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
//import android.view.ViewGroup;
import android.widget.Button;
//import android.widget.ListView;
//import android.widget.Toast;


public class MyHome extends Activity 
{

    Button btnMyMenu;
    Button btnAnnouncements;
    Button btnGoToWebsite;
    Button btnWorkflows;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.homelayout);

        //Initialising variables with xml properties
        btnMyMenu = (Button) findViewById(R.id.buttonMyStuff);
        btnAnnouncements = (Button) findViewById(R.id.buttonAnnouncements);
        btnGoToWebsite = (Button) findViewById(R.id.buttonWebsite);
        btnWorkflows = (Button)findViewById(R.id.buttonWorkflow);

        //Checking for button click listeners
        btnMyMenu.setOnClickListener(actionOnClickListener);
        btnGoToWebsite.setOnClickListener(buttonGoToWebsite);
        btnWorkflows.setOnClickListener(buttonWorkflows);

        //checking for context menu cluck
        registerForContextMenu(btnMyMenu);

    }//onCreate


    View.OnClickListener buttonWorkflows = new View.OnClickListener() 
    {

        @Override
        public void onClick(View v) 
        {
            Intent workflowIntent = new Intent(MyHome.this, Workflows.class);
            startActivity(workflowIntent);
        }
    };


    //Open myExperiment website when button clicked
    View.OnClickListener buttonGoToWebsite = new View.OnClickListener() 
    {

        @Override
        public void onClick(View v) 
        {
            String website = "http://www.myexperiment.org";
            Intent browse = new Intent(Intent.ACTION_VIEW, Uri.parse(website));
            startActivity(browse);
        }
    };



    private View.OnClickListener actionOnClickListener = new View.OnClickListener() 
    {

        @Override
        public void onClick(View v) 
        {
            if (v != null)
            {
                v.showContextMenu();
            }

        }
    };


    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
    {
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.setHeaderTitle("My Menu");
        menu.add(0, v.getId(), 0, "Workflows");
        menu.add(0, v.getId(), 0, "Credits");
        menu.add(0, v.getId(), 0, "Friends");
        menu.add(0, v.getId(), 0, "Groups");
        menu.add(0, v.getId(), 0, "Notifications");

    }//onCreateContextMenu

    public boolean onCreateItemSelected(MenuItem item)
    {
        if(item.getTitle() == "Workflows")
        {
            Intent workflowIntent = (Intent) item.setIntent(new Intent(MyHome.this, Workflows.class));
            startActivity(workflowIntent);


        }
        else if(item.getTitle() == "Credits")
        {


                    Intent creditsIntent = new Intent(MyHome.this, Credits.class);
                    startActivity(creditsIntent);

        }
        else if(item.getTitle() == "Friends")
        {

            View.OnClickListener buttonFriendsHandler = new View.OnClickListener() 
            {

                @Override
                public void onClick(View v) 
                {
                    Intent friendsIntent = new Intent(MyHome.this, Friends.class);
                    startActivity(friendsIntent);

                }
            };

        }


        else 
        { 
            return false; 
        }


        return true;    

    }//onCreateItemSelected


}

1 Ответ

0 голосов
/ 10 декабря 2011

Ваш заголовок не работает.Измените его на item.getTitle().equals("Workflows") и т. Д.

Еще лучше, используйте сопоставление идентификаторов вместо сопоставления строк.Добавьте свои пункты меню следующим образом:

int groupId = v.getId();
menu.add(groupId, 0, ContextMenu.NONE, "Workflows");
menu.add(groupId, 1, ContextMenu.NONE, "Credits");  // etc

Кроме того, вам не нужно устанавливать назначение пункта меню.Итак, в onCreateItemSelected:

public boolean onCreateItemSelected(MenuItem item) {
  switch(item.getItemId()) {
    case 0:
      Intent workflowIntent = new Intent(this, Workflows.class);
      startActivity(workflowIntent);
      break;
    case 1:
      Intent creditsIntent = new Intent(MyHome.this, Credits.class);
      startActivity(creditsIntent);
      break;
    // etc
  }
}
...