2013-01-21 95 views
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) { 
     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) { 
        } 

    } 
    ); 

} 

} 

回答

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);當你需要加載新的菜單項。

+0

好的,謝謝。但是如果我想打開ListView而不是第二個菜單呢?所以如果標誌是真的,它會打開菜單。但是,如果該標誌爲false,則會打開一個ListView。或相反亦然。如果該標誌爲true,則打開ListView,如果標誌爲false,則打開菜單。無論哪個更容易。 –

+0

然後你必須檢查點擊事件中的標誌,並打開上下文菜單或打開列表視圖。但我不確定你期待什麼樣的列表視圖。這是關於你的問題。所以我相信你必須計劃如何處理這種情況。所以你問每個點擊單獨的菜單,我發佈了我的想法,你可以根據條件膨脹不同的菜單。 –

+0

對您有幫助嗎? –

相關問題