2014-12-04 79 views
1

在我的應用程序中,我動態地創建了一些視圖,並且他們都註冊了相同的上下文菜單。如何獲取從哪個上下文菜單選項被選中的視圖?

for(int j = 0; j < CELLS_IN_ROW; j++) { 
    MyView v = new MyView(); 
    ((Activity) context).registerForContextMenu(v); 
} 
/* ----------------------------------------------- */ 


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

    MenuInflater menuInflater = getMenuInflater(); 
    menuInflater.inflate(R.menu.cell_context_menu, menu); 
} 

    @Override 
    public boolean onContextItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.myOption: 
      MyView viewClicked = ????? 

      doSomethingDependingOnView(viewClicked); 
      return true; 

     default: 
      return super.onContextItemSelected(item); 
    } 
} 

但是,當單擊菜單選項時,我想根據單擊哪個視圖打開上下文菜單來執行不同的操作。我怎樣才能做到這一點?

+0

MyView v = new MyView(); v.setID(J);並且您將從ViewClicked.getId() – koutuk 2014-12-04 12:36:17

+0

@koutuk:no ...中查看編輯後的代碼。以及如何獲得viewClicked?它沒有初始化... – micnyk 2014-12-04 12:41:35

+0

final ViewGroup viewGroup =(ViewGroup)((ViewGroup)this \t .findViewById(android.R.id.content))。getChildAt(0); \t \t viewGroup.addView(v);試試這個添加View然後爲每個視圖設置CLICK listner – koutuk 2014-12-04 12:49:35

回答

0

試試這個:

@Override 
public boolean onContextItemSelected(MenuItem item) { 
switch (item.getItemId()) { 
    case R.id.myOption: 

     AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
     MyView viewClicked = (MyView) info.targetView;  

     doSomethingDependingOnView(viewClicked); 
     return true; 

    default: 
     return super.onContextItemSelected(item); 
} 
+0

getMenuInfo()返回null ...我放棄。我將在View類中使用onLongClickListener和DialogBu​​ilder。 – micnyk 2014-12-04 14:24:34

+0

getMenuInfo()返回null ...我該如何解決它? – PriyankaChauhan 2017-01-05 11:27:40

0

不是最好的方法,但似乎工作只有一個:

// create a global variable 
Button clickedButton = null; 

// save the button 
@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { 
    clickedButton = (Button) v; 
} 

// do something with the clickedButton 
@Override 
public boolean onContextItemSelected(MenuItem item) { 
    doSomethingDependingOnView(clickedButton); 
    return true; 
} 
0

你當你的onCreateContextMenu開始得益於其參數在您clickedView參考查看

onCreateContextMenu(文本菜單釐米,查看視圖,ContextMenuInfo CMI)

所以你必須聲明查看的一些變量在您的活動(或片段), 那麼你應該初始化一個在onCreateContextMenu和終於可以在onContextItemSelected

MyView viewClicked; 

@Override 
public void onCreateContextMenu(ContextMenu menu, 
          View view, // this is your clicked view 
          ContextMenu.ContextMenuInfo menuInfo) { 
super.onCreateContextMenu(menu, v, menuInfo); 

MenuInflater menuInflater = getMenuInflater(); 
menuInflater.inflate(R.menu.cell_context_menu, menu); 
viewClicked = view; // <---!!! 

}

@Override 
public boolean onContextItemSelected(MenuItem item) { 
switch (item.getItemId()) { 
    case R.id.myOption: 

     viewClicked.someMethod(); 

     doSomethingDependingOnView(viewClicked); 
     return true; 
    default: 
     return super.onContextItemSelected(item); 
} 
使用

}

相關問題