为每个单独的项目充气单独的菜单单击

时间:2013-01-21 06:36:40

标签: java android eclipse android-contextmenu

从这里的很多帮助中,只要点击一个项目,我就可以使用这个代码来膨胀上下文菜单。但是,我无法弄清楚如何为每个项目充气,单独的菜单。我希望在单击其他项目时弹出不同的菜单。现在,无论我点击哪个项目,都会弹出相同的菜单。我怎么解决这个问题?这是我正在使用的代码。

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) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.testmenu, menu);
      }

        /** Called when the activity is first created.
         * @return */
@Override
public 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(){

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

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

    }
    );

}

}

1 个答案:

答案 0 :(得分:0)

这在android中很简单。唯一的问题是您可能需要动态地向系统添加菜单,而不是使用xml文件加载菜单项或根据用户的选择加载不同的xml菜单。

这是一个示例应用程序,它显示了如何执行此操作,

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
        if(flag)
        {
        menu.add("hi");
        menu.add("this");
        }
        else
        {
            menu.add("context");
            menu.add("menu");
        }
    super.onCreateContextMenu(menu, v, menuInfo);
}

基于标志值的上述方法会使不同的菜单项集膨胀。

以下是onCreate()方法,它有一个按钮,每次点击它时都会注册上下文菜单。

    Button button=null;
    boolean flag=false;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    button=(Button)findViewById(R.id.button1);
    button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            if(flag)
            {
                flag=false;
            }
            else
            {
                flag=true;
            }
            registerForContextMenu(v);
            openContextMenu(v);
        }
    });
    }

这是输出,

当标志为真时,

enter image description here

当标志为假时,

enter image description here

我认为关键是在需要加载新菜单项时调用registerForContextMenu(v);