0

我试图将我的菜单膨胀隔离到两个项目。我总共有六个项目。单击一个项目时,我希望出现第一个菜单。单击另一个项目时,我希望出现第二个菜单。

我的代码现在的方式是,当您单击六个项目中的三个时,会出现第一个菜单。当您单击六个项目中的其他三个时,会出现第二个菜单。

我该如何做到这一点,只有在单击一个特定项目时才会出现第一个菜单,而单击另一个特定项目时会出现第二个菜单?这是我现在的代码。

package com.carouseldemo.main;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuInflater;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import com.carouseldemo.controls.Carousel;
import com.carouseldemo.controls.CarouselAdapter;
import com.carouseldemo.controls.CarouselAdapter.OnItemClickListener;
import com.carouseldemo.controls.CarouselAdapter.OnItemSelectedListener;
import com.carouseldemo.controls.CarouselItem;

public class MainActivity extends Activity {



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

    if (flag)
       {
           menu.add("Product 1");
           menu.add("Product 2");
       }
       else 
       {
           menu.add("context");
           menu.add("menu");

       }
         super.onCreateContextMenu(menu, v, menuInfo);

      }
     boolean flag=false;


        /** Called when the activity is first created.
         * @return */
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    MediaPlayer mp = MediaPlayer.create(this, R.raw.radio);
    mp.start();
    Carousel carousel = (Carousel)findViewById(R.id.carousel);
    registerForContextMenu (carousel);
    carousel.setOnItemClickListener(new OnItemClickListener(){

         @Override           
        public void onItemClick(CarouselAdapter<?> parent, View view,
                                    int position, long id) {       
                          if (flag)
                          {
                              flag=false;
                          }
                          else
                          {
                              flag=true;
                          }
                          registerForContextMenu(view); 
                          openContextMenu (view);
                            Toast.makeText(MainActivity.this,
                                            String.format("%s has been clicked",
                                            ((CarouselItem)parent.getChildAt(position)).getName()),
                                            Toast.LENGTH_SHORT).show();                            
                    }

                    @Override
                    public void onCreateContextMenu(ContextMenu menu,
                            View v, ContextMenuInfo menuInfo) {
                        // TODO Auto-generated method stub

                    }

    });



    carousel.setOnItemSelectedListener(new OnItemSelectedListener(){

                    public void onItemSelected(CarouselAdapter<?> parent, View view,
                                    int position, long id) {

                    final TextView txt = (TextView)(findViewById(R.id.selected_item));

                            switch(position){
                            case 0:
                                    txt.setText("The cat (Felis catus), also known as the domestic cat or housecat to distinguish it from other felids and felines, is a small, usually furry, domesticated, carnivorous mammal that is valued by humans for its companionship and for its ability to hunt vermin and household pests. Cats have been associated with humans for at least 9,500 years, and are currently the most popular pet in the world. Owing to their close association with humans, cats are now found almost everywhere in the world.");
                                    break;
                            case 1:
                                    txt.setText("The hippopotamus (Hippopotamus amphibius), or hippo, from the ancient Greek for \"river horse\" (ἱπποπόταμος), is a large, mostly herbivorous mammal in sub-Saharan Africa, and one of only two extant species in the family Hippopotamidae (the other is the Pygmy Hippopotamus.) After the elephant, the hippopotamus is the third largest land mammal and the heaviest extant artiodactyl.");
                                    break;
                            case 2:
                                    txt.setText("A monkey is a primate, either an Old World monkey or a New World monkey. There are about 260 known living species of monkey. Many are arboreal, although there are species that live primarily on the ground, such as baboons. Monkeys are generally considered to be intelligent. Unlike apes, monkeys usually have tails. Tailless monkeys may be called \"apes\", incorrectly according to modern usage; thus the tailless Barbary macaque is called the \"Barbary ape\".");
                                    break;
                            case 3:
                                    txt.setText("A mouse (plural: mice) is a small mammal belonging to the order of rodents. The best known mouse species is the common house mouse (Mus musculus). It is also a popular pet. In some places, certain kinds of field mice are also common. This rodent is eaten by large birds such as hawks and eagles. They are known to invade homes for food and occasionally shelter.");
                                    break;
                            case 4:
                                    txt.setText("The giant panda, or panda (Ailuropoda melanoleuca, literally meaning \"black and white cat-foot\") is a bear native to central-western and south western China.[4] It is easily recognized by its large, distinctive black patches around the eyes, over the ears, and across its round body. Though it belongs to the order Carnivora, the panda's diet is 99% bamboo.");
                                    break;
                            case 5:
                                    txt.setText("Rabbits (or, colloquially, bunnies) are small mammals in the family Leporidae of the order Lagomorpha, found in several parts of the world. There are eight different genera in the family classified as rabbits, including the European rabbit (Oryctolagus cuniculus), cottontail rabbits (genus Sylvilagus; 13 species), and the Amami rabbit (Pentalagus furnessi, an endangered species on Amami ÅŒshima, Japan)");
                                    break;
                            }

                    }

                    public void onNothingSelected(CarouselAdapter<?> parent) {
                    }

    }
    );

}

}
4

1 回答 1

0

行。如果我理解正确,您只需为Carousel班级中的每个项目分配一个单独的上下文菜单。(后来我假设这Carousel是一个子类,AdapterView因为它是我知道的唯一使用OnItemSelectedListener处理程序的类。)

为此,首先要利用这样一个事实,即Carousel在显示上下文菜单时,将在上下文菜单侦听器中向您传递额外的信息。您可以提取上下文菜单应应用到的项目位置,并根据该位置创建菜单。为此,您必须更改onCreateContextMenu()处理程序:

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    // Just prepare ourself for unexpected arguments...
    if (menuInfo == null) {
        return;
    }
    if (!(menuInfo instanceof AdapterContextMenuInfo)) {
        return;
    }
    AdapterContextMenuInfo mi = (AdapterContextMenuInfo)menuInfo;
    switch (mi.position) {
    case 0:
        menu.add("cat menu");
        break;
    case 1:
        menu.add("hippopotamus menu");
        break;
    case 2:
        menu.add("monkey menu");
        break;
    case 3:
        menu.add("mouse menu");
        break;
    case 4:
        menu.add("panda menu");
        break;
    case 5:
        menu.add("rabbit menu");
        break;
    default:
        break;
    }
    super.onCreateContextMenu(menu, v, menuInfo);
}

试试看,告诉我这是否是你想要的。其余代码保持不变。

于 2013-01-21T23:50:03.550 回答