[英]Call a non-static method inside an abstract class from a static method
我試圖檢測何時關閉或更改了InputMethodManager.showInputMethodPicker()
調用的輸入法選擇器。 我在另一個問題中找到了Sherif elKhatib提出的一種可能的解決方案: 如何確定輸入法選擇器是打開還是關閉? 。 他的回答表明,OP應該使用抽象的非靜態類。 但是,我不知道如何在靜態方法中從抽象類中調用方法。 我以為我會在這里為此開一個單獨的問題,因為原始問題已經很舊並且不活躍。
這是Sherif引入的解決方案:
public abstract class InputMethodActivity extends FragmentActivity {
protected abstract void onInputMethodPicked();
@Override
protected void onCreate(Bundle savedInstanceState) {
mState = NONE;
super.onCreate(savedInstanceState);
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if(mState == PICKING) {
mState = CHOSEN;
}
else if(mState == CHOSEN) {
onInputMethodPicked();
}
}
private static final int NONE = 0;
private static final int PICKING = 1;
private static final int CHOSEN = 2;
private int mState;
protected final void pickInput() {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showInputMethodPicker();
mState = PICKING;
}
}
我想調用的方法是pickInput()
,以便從onInputMethodPicked()
獲得響應。
但是,簡稱為pickInput();
靜態方法無法正常工作,甚至找不到。
此外, InputMethodActivity.pickInput();
給出錯誤“ 無法從靜態上下文中引用非靜態方法'pickInput()' ”。
接下來,我嘗試實例化它,但是我發現摘要無法實例化: InputMethodActivity instant = new InputMethodActivity();
給出錯誤“ 'InputMethodActivity'是抽象的;無法實例化 ”。
進一步閱讀后,我嘗試創建一個統一的類: InputMethodActivity anonym = new InputMethodActivity() {};
anonym InputMethodActivity anonym = new InputMethodActivity() {};
,但這會導致錯誤“ 必須從抽象聲明類或在'InputMethodActivity'中實現抽象方法'onInputMethodPicked()'來聲明類 ”。 我以為它們已經被聲明為抽象了,所以我在這里快要結束了。
問題:
基本上,我想知道是否可以在靜態方法(例如public void onClick_TextView(View v){}
pickInput()
中運行pickInput()
,以及如何實現該方法。
抽象類只能繼承它,並為抽象方法(如onInputMethodPicked
方法)在不同的派生類中編寫不同的實現,通過繼承,您可以使用MainActivity
(子類)中InputMethodActivity
(父類)的任何方法,如pickInput
方法
public class MainActivity extends InputMethodActivity implements View.OnTouchListener {
@Override
protected void onInputMethodPicked(){
// your implemetion after pick
}
@Override
public void onClick(View view) {
pickInput();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.