2013-07-26 55 views
0

你好我嘗試使用onclicklistener以及onmenuselectlistener在我的mainactivity類和程序運行,但選擇彈出菜單opions不工作,他們將不會設置文本想要任何人有任何想法?我知道我沒有實現onMenuSelectListener,也許這就是我的問題,如果是有任何其他方式來使這項工作?如何在主要活動中使用onClickListener和onMenuSelectListener?

這裏是我的代碼:

public class MainActivity extends Activity implements OnClickListener { 
// init variables 
Handler uiHandler; 
EditText cl; 
TextView info; 
Button enter; 
Button line; 
Button arc; 
DrawingUtils callDU = new DrawingUtils(); 
DrawingTools callDT = new DrawingTools(); 
EditTools callET = new EditTools(); 
Conversion callConversion = new Conversion(); 
GLSurfaceView mGLSurface; 
String Tag = "Debug"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mGLSurface = new GLSurfaceView(this); 
    mGLSurface.setRenderer(new BasicRenderer()); 
    setContentView(R.layout.canvas); 
    FrameLayout v = (FrameLayout) findViewById(R.id.canvas); 
    v.addView(mGLSurface); 

    // init views and buttons 
    info = (TextView) findViewById(R.id.info); 
    enter = (Button) findViewById(R.id.enter); 
    line = (Button) findViewById(R.id.line); 
    arc = (Button) findViewById(R.id.arc); 
    cl = (EditText) findViewById(R.id.cl); 

    /* 
    * Handler for Main Thread uiHandler = new Handler() { public void 
    * handleMessage(Message msg) { switch (msg.what) { 
    * 
    * } Bundle bundle = msg.getData(); String string1 = 
    * bundle.getString("P1Key"); String string2 = 
    * bundle.getString("P2Key"); info.setText(string1); 
    * info.setText(string2); } }; 
    */ 

} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 

    case R.id.enter: 

     break; 
    case R.id.line: 

     break; 
    case R.id.arc: 

     break; 

    } 

}; 

public void CreatePopupMenu(View v) { 
    PopupMenu mypopupmenu = new PopupMenu(this, v); 
    MenuInflater inflater = mypopupmenu.getMenuInflater(); 
    inflater.inflate(R.menu.filemenu, mypopupmenu.getMenu()); 
    mypopupmenu.show(); 
} 

@Override 
public boolean onMenuItemSelected(int featureId, MenuItem item) { 
    // TODO Auto-generated method stub 
    switch (item.getItemId()) { 
    case R.id.newCanas: 
     info.setText("New"); 
     Log.d(Tag, "New was clicked"); 
     break; 
    case R.id.open: 
     break; 
    case R.id.save: 
     break; 
    } 
    return super.onMenuItemSelected(featureId, item); 

} 

}

回答

0

它看起來並不像你附加onClickListeners任何東西。這意味着你在說「每當onClick事件與我一起作爲目標發起時,執行此操作」。但是,你永遠不會讓自己成爲一個目標。嘗試將以下代碼添加到您的onCreate。

arc.setOnClickListener(this); 
line.setOnClickListener(this); 
enter.setOnClickListener(this); 

同樣的事情發生在PopupMenu它出現。嘗試在爲菜單膨脹佈局後立即添加mypopupmenu.addOnMenuItemSelectListener(this)

+0

怎麼樣的菜單項? –

+0

我編輯了我的答案。 – Jonathan

+0

好的,我會嘗試。 –

0

喬納森是對的。您應該爲創建後添加的每個按鈕添加.setOnClickListener(this);

對於菜單項,雖然,你必須做到以下幾點:

1)創建您的菜單上的項目佈局,並將其存儲在您的res/menu/目錄。

實施例: main.xml中

<item 
    android:id="@+id/action_settings" 
    android:orderInCategory="100" 
    android:showAsAction="never" 
    android:title="@string/action_settings"/> 

</menu> 

2)重寫調用的方法:onCreateOptionsMenu()填充在菜單中的項目。

例子:

public boolean onCreateOptionsMenu(Menu menu) { 
// Inflate the menu; this adds items to the action bar if it is present. 
getMenuInflater().inflate(R.menu.main, menu); 
return true; 
} 

3)覆蓋任何你想用一個開關就像你用的ActionListeners做的方法onOptionsItemSelected()做。

4)此外,您也可以覆蓋與前一個方法相同的方法onPrepareOptionsMenu(),但每次菜單打開時都會調用它。

祝你好運

+0

這取決於OP的菜單項是否在選項菜單中,或者只是一個普通的舊菜單。鑑於OP沒有調用'onCreateOptionsMenu',我沒有想到OP正在使用選項菜單。如果他或她是那麼你是對的。 – Jonathan

+0

它是用於點擊按鈕文件時的彈出式菜單。除此之外,我不確定選項菜單或簡單的舊菜單之間的區別。 –

+0

那麼,在這種情況下,你應該遵循[Android的開發者指南](http://developer.android.com/guide/topics/ui/menus.html)菜單。它提供了各種不同的菜單(上下文,彈出窗口等) –