2011-10-04 157 views
1

我想知道以模块化方式从其他视图启动活动的最佳方式。我试图找出一种方法来告诉我的“按钮”在“onTouchEvent”中选择了哪个活动后触发。目前,我的主要活动是创建我的'MainMenu'并将其设置。我的主菜单定义了一个MenuItem类,该类定义了绘制按钮的矩形,并在相交/触摸/点击时触发一个活动。不过,我在解雇这项活动时遇到了一些困难。下面是只是一小段代码展示了一些我想要实现:从视图中启动活动

public class MainMenu extends View { 
... 
private Vector<MenuItem> menuItems; 
private MenuItem testButton; 
private MenuItem testButton2; 

public MainMenu(Context context) { 
    ... 
    // Create our menu buttons and load their specific images 
    testButton = new MenuItem(context, new OptionsMenu(), 150, 50, imgButtons, 256, 64, 0, 0); 
    testButton2 = new MenuItem(context, OptionsMenu.class, 150, 200, imgButtons, 256, 64, 0, 0); 

    // Store our buttons 
    menuItems = new Vector<MenuItem>(5, 2); 
    menuItems.add(testButton); 
    menuItems.add(testButton2); 
} 

... 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if (event.getAction() != MotionEvent.ACTION_DOWN) 
     super.onTouchEvent(event); 

    // Create our menu item iterator 
    Iterator<MenuItem> menuItemsIter = menuItems.iterator(); 
    Object element; 

    // Loop through our menu items, drawing them 
    while(menuItemsIter.hasNext()) { 
     element = menuItemsIter.next(); 
     if(((MenuItem)element).HasIntersected((int)event.getX(), (int)event.getY())) { 
      ((MenuItem)element).LaunchActivity(); 
     } 
    } 

    return true; 
} 
} 

class MenuItem { 
... 
private Context container = null; // Indicates which activity contains us 
private Object startObject = null; // Which activity we'll start/execute 

public MenuItem(Context context, Object object, int xPos, int yPos, Bitmap image, 
       int imageWidth, int imageHeight, int xOffset, int yOffset) { 
    ... 
    container = context; 
    startObject = object; 
} 

... 

public void LaunchActivity() { 
    if(startObject != null) { 
     Intent activity = new Intent(container, startObject.getClass()); 
     container.startActivity(activity); 
    } 
} 
} 

我试着设置菜单项我的对象两种不同的方式(新OptionsMenu()和OptionsMenu.class),但也似乎工作。我尝试在创建新的Intent时避开使用MenuItem的startObject,并使用(container,optionsMenu.class)作为参数。哪个也没用。从我所知道的这是开展一项活动的正确方式,但我想我错过了某个步骤。

此外,我读了一些提及使用回调的人的文章/帖子,但是在Activity一侧而不是View一侧。但是,我是否应该使用Android回调,或者是否应该创建自己的回调并设置自己的系统,这并不是很清楚。

任何有关我做错了什么信息,或者我可以采取不同的方式来处理这个不同/更好的方式,将不胜感激。谢谢。

+0

看来我刚刚犯了新手错误,忘记了将我想要使用的活动添加到清单中。然而,如果你想以类似的方式来设置对象,正确的方法是通过:“Object myObject = new MyActivity();”然后调用“context.startActivity(new Intent(context,myObject.getClass()));”我不确定他们是否能帮助任何人,但这只是我的错误。我没有足够的信誉来回答我自己的问题:( –

回答

1

恕我直言,只是Button支持发送点击事件的OnClickListener,您的自定义View应该有发送自定义事件控制器(例如,活动)自己的自定义事件接口。由控制器决定如何处理这些事件,例如启动其他活动。

+0

我不是特别喜欢按钮的股票风格,所以我决定创建我自己的按钮。我最初阅读了关于OnClickListener,但它涉及到按钮的点击事件,就像你说的那样,我会做一些阅读,看看我能否整合/实现与你所说的相关的东西,我不介意它按照它的意图工作/沟通。 ,如果你不介意的话,我会回来和你联系,这样我就可以验证我是否正确地处理了这种情况。 –