2011-09-06 64 views
0

我的主類有一個名爲commitChanges()的公共方法。 我的佈局包含擴展EditTexts當按下後退按鈕可同時檢測,如下建議:Get back key event on EditText在主要活動上調用公共方法

現在,當檢測到後退按鈕按下的時候,我需要執行的CommitChanges,其存儲內容到一個數組。然而commitChanges需要訪問活動的列表視圖。

問題是:如何訪問主活動的commitChange函數?我將需要主要活動的實例。擴展的EditText的繼承人的代碼:

public class BackText extends EditText{ 

private static final String TAG = "baby"; 
public BackText(Context context) { 
    super(context); 

} 

public BackText(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public BackText(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 

@Override 
public boolean onKeyPreIme(int keyCode, KeyEvent event) { 
    if ((keyCode == KeyEvent.KEYCODE_BACK) && 
     event.getAction() == KeyEvent.ACTION_UP) { 
      Log.d(TAG,"keypad exit"); 
      commitChange(this); 
      return false; 
    } 
    return super.dispatchKeyEvent(event); 
} 

}

說明我是一個初學者,這很適合我先進。注2:這與服務/多項活動無關。 BackTexts被放置在主要活動中。

回答

0

我通過添加下面的子類,我的主要活動課解決了這個.cwac.tlv.demo.commit「);

BroadcastReceiver receiver = new backReceiver(); 
registerReceiver(receiver,filter); 

,加入這BackText一個EditText上延伸:

@Override 
public boolean onKeyPreIme(int keyCode, KeyEvent event) { 
    if ((keyCode == KeyEvent.KEYCODE_BACK) && 
     event.getAction() == KeyEvent.ACTION_UP) { 
      Log.d(TAG,"keypad exit"); 
      Intent intent = new Intent("com.ninovanhooff.babynames.commit"); 
      this.setTag("EDIT"); 
      getContext().sendBroadcast(intent); 
      return false; 
    } 
    return super.dispatchKeyEvent(event); 
} 
1

我會爲您的活動添加一個廣播接收器,並從您的小部件代碼中激發廣播意圖。我會避免小部件和你提出的活動之間的緊密耦合。

class backReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d(TAG,"BACK received"); 
     BackText bt = (BackText)tlv.findViewWithTag(EDIT_TAG); 
     bt.setTag(null);//only needed for id between caller/receiver 
     commitChange(bt); 
    } 

} 

並添加以下到的OnCreate主要活動:

IntentFilter的過濾器=新的IntentFilter(「com.commonsware

+0

似乎是一個很大的努力對於這樣一個簡單的事情。另外:我的主類現在擴展ListActivity。我是否需要製作一個擴展BroadcastReceiver的子類來操縱需要更新的數組? –

+0

我會創建一個擴展BroadcastReceiver的匿名成員對象。我同意這是一個很大的努力,但從一個小部件調用一個活動實例可能是一個不好的破解。我很想被證明,否則:) – Macondo2Seattle