2011-10-04 152 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,但它涉及到按鈕的點擊事件,就像你說的那樣,我會做一些閱讀,看看我能否整合/實現與你所說的相關的東西,我不介意它按照它的意圖工作/溝通。 ,如果你不介意的話,我會回來和你聯繫,這樣我就可以驗證我是否正確地處理了這種情況。 –